2015-10-20 121 views
-2

我嘗試過不同的選項,但它不起作用。該代碼生成英文pdf,但不適用於其他語言。使用iTextSharp爲不同的語言生成pdf

using (var ms = new MemoryStream()) 
      { 
       // Create an iTextSharp Document which is an abstraction of a PDF but **NOT** a PDF 
       var doc = new Document(); 
       { 
        // Create a writer that's bound to our PDF abstraction and our stream 
        var writer = PdfWriter.GetInstance(doc, ms); 
        { 
         // Open the document for writing 
         doc.Open(); 

         string finalHtml = string.Empty; 

         // Read your html by database or file here and store it into finalHtml e.g. a string 
         // XMLWorker also reads from a TextReader and not directly from a string 
         using (var srHtml = new StringReader(sHtmlText)) 
         { 
          // Parse the HTML 
          iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml); 
         }        
         doc.Close(); 
        } 
       } 

       // After all of the PDF "stuff" above is done and closed but **before** we 
       // close the MemoryStream, grab all of the active bytes from the stream 
       return new PDFFormFillerResult(ms, PDFFormFillerResultType.Success, string.Empty); 
       //bytes = ms.ToArray(); 
      } 
+1

你嘗試過什麼選擇?什麼是失敗? – Kenneth

+0

這不是失敗,它提供的內容是英語作爲輸出和忽略和其他語言字符 – Ravia

+1

你得到什麼錯誤,它失敗的地方在哪裏? – Kenneth

回答

0

那麼我們不得不購買另一個瞭解UNICODE字符的第三方工具。

+0

*瞭解UNICODE字符* - 哪些iTextSharp也可以。順便說一下,你的「答案」不會**回答問題。由於這個問題也是你的問題,所以你可以將這個註釋作爲一個後文本添加到問題中。 – mkl

0

我能夠用英文和日文創建多語言PDF。 實現此目標的先決條件 1.要有合適的支持您打算使用的語言的Font。 2.從iTextSharp實現IFontProvider接口並註冊您將使用的多語言字體。

如果您按照以下2個步驟操作,您可以創建多語言PDF。

代碼示例:

public class smartUIFontProvider: IFontProvider 
    { 
     public Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color) 
     { 
      string myFont = @"C:\Tasks\Projects\SampleProject\iTextDemo_PDF\SmartFontUI\SmartFontUI.otf"; 
      iTextSharp.text.pdf.BaseFont bfR; 
      bfR = iTextSharp.text.pdf.BaseFont.CreateFont(myFont, 
       iTextSharp.text.pdf.BaseFont.IDENTITY_H, 
       iTextSharp.text.pdf.BaseFont.EMBEDDED); 
      iTextSharp.text.BaseColor clrBlack = 
       new iTextSharp.text.BaseColor(0, 0, 0); 
      iTextSharp.text.Font fntHead = 
       new iTextSharp.text.Font(bfR, 12, iTextSharp.text.Font.NORMAL, clrBlack); 
      return fntHead; 
     } 
     public bool IsRegistered(string fontname) 
     { 
      return true; 
     } 
    } 

static void Main (string[] args) 
     { 
      // step 1 
      Document document = new Document(); 
      Byte[] bytes; 
      var fileName = "resources\\test_" + System.DateTime.Now.ToString("ddMMyyyy_hhmm") + ".pdf"; 
      var testFile = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), fileName); 

      MemoryStream ms = new MemoryStream(); 
      // step 2 

      using (var writer = PdfWriter.GetInstance(document, ms)) 
      { 
       document.Open(); 

       String example_html = @" <!DOCTYPE html> <html> <head> </head> <body> <h1>Change of Control Application</h1> <br/> <p>Please fill out this form if there are updates to your current organization and its relationship Company has on file with the legal binding entity. Company will review the information and may ask you to provide further information before Company agrees to the requested changes.</p> <br/> <table class='bodyText1LIC general' style='width:700px' id='tblInputForm' > <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3>Licensee Information</h3> </td> </tr> <tr> <td class='bodyText1SerNo'>1.</td> <td class='bodyText1LIC'>Licensee Name&nbsp;</td> <td valign='top' class='txtboxtd'> 字詰めなどの調整をおすすめします </td> <td> &nbsp;</td> </tr> <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3>Licensee Primary Contact Information </h3> </td> </tr> <tr> <td class='bodyText1SerNo'>2.</td> <td class='bodyText1LIC'>Name</td> <td class='txtboxtd'> めなどの調整 </td> <td> &nbsp;</td> </tr> <tr> <td class='bodyText1SerNo'>3.</td> <td class='bodyText1LIC'>Job Title</td> <td class='txtboxtd'> T</td> <td> &nbsp;</td> </tr> <tr> <td class='bodyText1SerNo'>4.</td> <td class='bodyText1LIC'>Mailing Address</td> <td class='txtboxtd'>めなどの調整</td> <td> &nbsp;</td> </tr> <tr> <td class='bodyText1SerNo'>5.</td> <td class='bodyText1LIC'>Telephone Number&nbsp;</td> <td class='txtboxtd'>T</td> <td>&nbsp;</td> </tr> <tr> <td class='bodyText1SerNo'>6.</td> <td class='bodyText1LIC'>Email Address&nbsp;</td> <td class='txtboxtd'>[email protected]</td> <td>&nbsp;</td> </tr> <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3> Organizational Structure</h3> </td> </tr> <tr> <td class='bodyText1SerNo'> 7.</td> <td class='bodyText1LIC' colspan='3'> Will your Company's Name Change?&nbsp;</td> </tr> <tr> <td></td> <td colspan='3'> Yes</td> </tr> <tr class='nc' id='TrCompanyName'> <td></td> <td class='bodyText1LIC' colspan='2'> a) &nbsp; &nbsp;New company name&nbsp;</td> <td class='txtboxtd'> DSFDASFASDFDSA</td> </tr> <tr class='nc' id='TrEffectiveDate'> <td></td> <td class='bodyText1LIC' colspan='2'> b) &nbsp; &nbsp;Effective Date Company change will take place &nbsp;</td> <td class='txtboxtd'> 04/20/2017</td> </tr> <tr> <td class='bodyText1SerNo'>8.</td> <td class='bodyText1LIC' colspan='3'>Has your Company been Reincorporated or under gone an Internal Reorganization?&nbsp;</td> </tr> <tr> <td></td> <td colspan='3'> No</td> </tr> <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3>Assets/Stocks to be Acquired </h3> </td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3>Assets to be Acquired</h3> </td> </tr> <tr> <td class='bodyText1SerNo'>9.</td> <td class='bodyText1LIC' colspan='3'>Will some or all of your Company’s Assets be Acquired? &nbsp;</td> </tr> <tr> <td></td> <td colspan='3'> No</td> </tr> <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3>Stocks to be Acquired </h3> </td> </tr> <tr> <td class='bodyText1SerNo'>10.</td> <td class='bodyText1LIC' colspan='3'>Will some or all of your Company’s Assets be Acquired? &nbsp;</td> </tr> <tr> <td></td> <td colspan='3'> No</td> </tr> <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3> Effects of Change to Licensee</h3> </td> </tr> <tr> <td class='bodyText1SerNo'> 11.</td> <td class='bodyText1LIC' colspan='3'> Please indicate which Company is the Surviving Legal Entity? &nbsp;</td> </tr> <tr> <td></td> <td class='txtboxtd' colspan='3'> T</td> </tr> <tr> <td class='bodyText1SerNo'>12.</td> <td class='bodyText1LIC' colspan='3'>Please provide the Company that will be the Licensee?&nbsp;</td> </tr> <tr> <td class='txtboxtd'>&nbsp;</td> <td colspan='3'> T</td> </tr> <tr> <td valign='top' class='bodyText1SerNo'>13.</td> <td class='bodyText1LIC' colspan='3'>Will any companies exist to operate as separate Subsidiaries or Affiliates ? &nbsp;</td> </tr> <tr> <td></td> <td colspan='3'> No</td> </tr> <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3>Existing Agreements</h3> </td> </tr> <tr> <td class='bodyText1SerNo'>14.</td> <td class='bodyText1LIC' colspan='3'>Please identify if any Licenses that will be affected by the Changes described above &nbsp;</td> </tr> <tr> <td></td> <td colspan='3'> No</td> </tr> <tr> <td class='bodyText1LIC' colspan='4'>&nbsp;</td> </tr> <tr> <td class='tableBody1' colspan='4'> <h3>Corporate Documentation</h3> </td> </tr> <tr> <td valign='top' class='bodyText1SerNo'>15.</td> <td class='bodyText1LIC' colspan='3'>Please Select from 1 of the 2 options listed below</td> </tr> <tr> <td></td> <td colspan='3'> Please Describe the Full Legal Structure of this Organization Change in relation to Licensing.</td> </tr> <tr> <td></td> <td colspan='3'> ASDFSDAFDSAFADSFDASF &nbsp;</td> </tr> </table> </body> </html>"; 
       String example_css = @"html { font-family: SmartFontUI; font-size: 14px; } h1, h2, strong { font-family: SmartFontUI; font-weight: bold; display: inline; } h1 { font-size: 18pt; } .main { font-size: 12pt; color: black; font-family: SmartFontUI, Arial, Sans-Serif; background-color: white; text-align: left; line-height: 1.4em; margin: 2%; } .mainDesc { width: 100%; margin: 10px 0; } span { float: left; display: block; width: 100%; margin-bottom: 5px; } .bodyText1SerNo { width: 2em; } .bodyText1LIC { width: 22em; } .txtboxspan { width: 32em; } .tableBody1 { width: 100%; } .nc { margin-left: 100px; } .subtitle { font-size: 16pt; }"; 
       FontFactory.Register(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "SmartFontUI.otf"), "SmartFontUI"); 

       XMLWorkerHelper worker = XMLWorkerHelper.GetInstance(); 

       MemoryStream msHtml = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_html)); 
       MemoryStream msCss = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(example_css)); 

       smartUIFontProvider smartUIFontObj = new smartUIFontProvider(); 

       worker.ParseXHtml(writer, document, msHtml, msCss, System.Text.Encoding.UTF8, smartUIFontObj); 
       // step 5 
       document.Close(); 

      } 

      bytes = ms.ToArray(); 
      System.IO.File.WriteAllBytes(testFile, bytes); 
     } 
相關問題