我有PDF的我以編程方式生成。我需要能夠將PDF直接從服務器發送到打印機(而不是通過中間應用程序)。目前,我可以完成上述所有工作(生成PDF,發送到打印機),但由於字體未嵌入PDF,因此打印機正在進行字體替換。
爲什麼時產生的字體沒有嵌入:
我創建PDF的使用SQL Reporting Services的2008年有一個已知的問題與SQL Reporting Services中,它不會嵌入字體(除非系列的要求得到滿足 - http://technet.microsoft.com/en-us/library/ms159713%28SQL.100%29.aspx)。不要問我爲什麼,PDF滿足MS列出的所有要求,字體仍然顯示爲未嵌入 - 沒有真正控制字體是否嵌入,所以我已經接受,這是不工作,並繼續前進。來自Microsoft的建議解決方法(http://blogs.msdn.com/b/donovans/archive/2007/07/20/reporting-services-pdf-renderer-faq.aspx'何時將Reporting Services做字體嵌入')是發佈處理PDF以手動嵌入字體。
目標 取一個已生成的PDF文檔,以編程方式「打開」它並嵌入字體,重新保存PDF。
方法 我指出對iTextSharp的,但大多數的例子是用於Java版本,我無法轉換到iTextSharp的版本(我找不到任何iTextSharp的文檔)。
我正在爲這個職位工作,我需要做的事情:Itext embed font in a PDF。
但是對於我的生活,我似乎無法使用ByteArrayOutputStream對象。它似乎無法找到它。我已經研究和研究過,但似乎沒有人說出它在哪個類或哪裏找到它,所以我可以將它包含在使用語句中。我甚至打開了反射器,似乎無法在任何地方找到它。
這是我到目前爲止編寫的等等。 (結果是我生成的PDF的byte [])。
PdfReader pdf = new PdfReader(result);
BaseFont unicode = BaseFont.CreateFont("Georgia", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
// the next line doesn't work as I need a ByteArrayOutputStream variable to pass in
PdfStamper stamper = new PdfStamper(pdf, MISSINGBYTEARRAYOUTPUTSTREAMVARIABLE);
stamper.AcroFields.SetFieldProperty("test", "textfont", unicode, null);
stamper.Close();
pdf.Close();
因此,任何人都可以幫助我使用iTextSharp將字體嵌入PDF中或指向正確的方向嗎?
我非常樂意使用除iTextSharp以外的任何其他解決方案來完成此目標,但它必須是免費的並且能夠被企業用於內部應用程序(即Affero GPL)。
你能給出你需要嵌入的字體的名字嗎? (有些字體的許可證不允許嵌入,並且大多數PDF處理或創建軟件確實遵守字體文件中的相應標誌,並選擇不嵌入T ...) – 2010-11-20 17:28:30
當然!格魯吉亞和Calibri - 我已經檢查過我們有TrueType版本和(根據Windows),他們都將'字體嵌入性'標籤設置爲'可編輯' - 我收集這是正確的設置?謝謝你的幫助! – hanzworld 2010-11-21 02:53:04
對於稍後閱讀此內容的人來說,這兩種方法都有效。 SQL Reporting Services最終在許多更新/修補程序後正確嵌入字體,並可以直接發送到打印機。另外,使用.NET中的ProcessInfo調用Ghostscript可以後處理PDF。 – hanzworld 2011-08-31 00:42:24