2012-03-12 27 views
0

我使用Helvetica字體和14像素大小的文字。問題是,如果頁面上沒有任何圖像,則文本非常清晰,但在至少有1張圖像的頁面中,文本變得粗體。你可以明白我的意思在下面的圖片:iTextSharp:爲什麼在向PDF頁面添加圖像時,文本字體不同?

Without image on page *無圖像

With image on page *隨着圖像

頁面上的正確的字體是出現在照片#1的一個。如何使所有頁面具有相同的字體,即使該頁面包含圖像或不是?

謝謝。

示例代碼:

Document document = new Document(PageSize.LETTER); 
document.SetMargins(docMargin, docMargin, docMargin, 25); 
writer = PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create)); 
document.Open(); 

Font defaultFont = FontFactory.GetFont("Helvetica", 7.8, Font.NORMAL, new Color(75, 75, 75)); 
document.Add(new Paragraph("Lorem ipsum lorem ipsum lorem ipsum", defaultFont)); 
document.Add(Chunk.NEWLINE); 
Image img = Image.GetInstance("my png image path"); 
document.Add(img); 

document.Close(); 

回答

2

我終於能夠重現您的問題。我測試過的第一個PNG沒有重現您從Photoshop創建的問題,並使用了Save For Web命令。我測試過的第二個PNG能夠重現您從MSPAINT.EXE創建的問題。我在Save For Web中嘗試了各種組合,並且它們都沒有與Paint相同的問題。

根據官方iText郵件列表中的this thread,它似乎是關於圖像的顏色配置文件。

什麼是你看到的是新放置的透明性的影響到以前沒有包含它,當考慮是不是最終輸出文件的色彩空間混合給出 一個 PDF。

由於缺少明確的混合空間,因此您有一個RGB文檔,該文檔在添加透明度後被強制爲 CMYK。如果您在指定 RGB作爲您的顯式混合空間的同時添加了透明度,則一切正常。他們建議

有一件事是添加任何東西之前設置以下屬性,您PdfWriter

writer.RgbTransparencyBlending = true; 

當我這樣做,我還看到一個非常小的轉變,但是沒有在附近爲明顯因爲沒有它。

0

這不是一個答案,我只需要能夠發佈代碼。

我無法重現您的結果,但是如果我猜測它與您的PDF渲染器有關。您可以通過放大文本來確認,放大時看起來是否一樣?如果是這樣,那就是您的渲染器嘗試將視覺提示應用於打印文檔。如果沒有,你可以發佈你的代碼的簡化版本嗎?這是否爲所有圖像或只是一個特定的圖像?你如何創建你的文字,有段落,表格,HTML解析或其他東西?您使用的是什麼版本的iTextSharp?

下面是一個完整的適用於iTextSharp 5.1.2.0的WinForms C#2010,它創建了一個兩頁的PDF。第一頁只有文本,第二頁有文本,隨後是從桌面加載的圖像。在我的機器上,使用Adobe Acrobat Pro 9.1.3時,我在屏幕上查看字體時看不到任何字體差異。

using System; 
using System.IO; 
using System.Windows.Forms; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 

namespace WindowsFormsApplication1 { 
    public partial class Form1 : Form { 
     public Form1() { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) { 
      string pdfFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf"); 
      string imgFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.png"); 

      using (FileStream fs = new FileStream(pdfFile, FileMode.Create, FileAccess.Write, FileShare.None)) { 
       using (Document doc = new Document(PageSize.LETTER)) { 
        using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) { 
         doc.Open(); 

         BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED); 
         iTextSharp.text.Font f = new iTextSharp.text.Font(bf, 14); 

         doc.NewPage(); 
         doc.Add(new Paragraph("This is a test", f)); 

         doc.NewPage(); 
         doc.Add(new Paragraph("This is a test", f)); 
         iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imgFile); 
         img.ScaleAbsolute(100, 100); 
         doc.Add(img); 


         doc.Close(); 
        } 
       } 
      } 

      this.Close(); 
     } 
    } 
} 
+0

我使用4.2.0版本。我做了一個簡單的例子,添加了1段和一個圖片,結果是一樣的。放大到800%後,仍然可以看到文本之間的一點區別。 – Emanuel 2012-03-12 16:49:17

相關問題