2012-03-12 69 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

相关问题