簡體   English   中英

如何PDF調整rdlc和itextsharp生成的大小

[英]How to PDF Resize generated by rdlc and itextsharp

我使用rdlc生成了pdf,然后使用iTextSharp pdfsmartcopy類將多個pdf文件合並到一個文檔中。 但我的pdf大小很大,我想減小該pdf文件的大小。 我曾嘗試使用iTextSharp壓縮它,但無法壓縮它。 當我將pdf文件在線上傳到ilivepdf.com進行壓縮時,它會將21MB文件壓縮為1MB。

通常,問題與嵌入字體有關。

你看,PDF確實努力保存你的文件。

為此,PDF庫可以決定嵌入字體。 你可以想象這只是將字體文件放入PDF文檔中。

但是,這是棘手的部分。

PDF規范考慮到這可能是過度的。 我的意思是,如果你只使用西方語言中通常使用的50個字符的字符,那么嵌入整個字體就沒什么意義了。

所以PDF支持一種稱為“字體子集”的功能。 這意味着,不是嵌入整個字體,而是僅將實際使用的那些字符嵌入到文檔中。

那么當你合並這些文件時究竟出了什么問題呢?

(我將跳過很多技術細節。)

為了區分完全嵌入的字體,系統字體或子集嵌入字體, iText在嵌入字體時為您的字體生成新的字體名稱。

因此,包含Times New Roman子集的文檔可能在其資源中包含“Times-AUHFDI”。

同樣,第二個文檔(同樣包含Times New Roman的子集)可能會將“Times-VHUIEF”列為其資源之一。

我相信它只是添加一個隨機的6個字符的后綴。 (前iText開發人員)

PdfSmartCopy必須決定如何處理這些資源。 遺憾的是,它不知道這些字體是否實際上是相同的。 因此它決定將這兩個子集嵌入到新文檔中。

這是一個巨大的內存懲罰。 如果您有100個文檔,所有文檔都使用相同字體的子集,則該子集將嵌入100次。

您列出的另一個工具實際上可能會檢查這些字體是否相同(如果是,則只嵌入一次)。 或者其他工具可能根本不關心那么多,並假設基於部分名稱匹配它們是相同的。

理想的解決方案當然是比較字體中的實際字符,以查看是否可以合並這兩個子集。

但這將更加困難(並且可能會造成性能損失)。

你能做什么?

  1. 有12種字體從未嵌入。 它們被假定存在於每個系統上(因此它們從未嵌入它們。)

    如果您可以控制生成PDF文檔的過程,則可以簡單地決定僅使用這些字體創建它們。

  2. 或者,您可以編寫更智能的PdfSmartCopy 您需要了解字體的構建和存儲方式,並執行前面提到的實際比較。

  3. 在iText尋求技術支持。 如果有足夠多的人請求此特定功能,您可能會得到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM