iText,创建和添加内容的顺序

时间:2017-11-15 14:43:57

标签: java c# itext

我正在创建一个PDF文件,但偶然发现了一个问题。以下是导致它的iText命令。

document.Header = header;
document.Open();
PdfContentByte cb = writer.DirectContentUnder; (getDirectContentUnder() for java)

document的类型为Document; writerPdfWriterheader的类型为HeaderFooter

iText对这些命令的顺序具有相同的条件,它们是:

    打开文档前无法使用
  • PdfWriter
  • 如果我在向其添加标题之前打开文档,
  • PDF的标题根本不会显示

那没关系,我会按照上面的代码片段顺序编写它。但我需要PdfWriter来创建标题。现在我处于一个循环中:

  • 要创建标题,我需要使用PdfWriter
  • 使用PdfWriter,我需要先打开文档
  • 要显示标题,我需要在打开文档之前创建它

另外,我发现源代码都建议将标题创建为之前打开文档,以及建议在之后创建标题该文件已经打开。哪个是对的以及如何解决我的问题?

更新:代码

BaseFont bf16 = BaseFont.CreateFont( "c:\\windows\\fonts\\Arial.ttf", BaseFont.CP1250, false );
Font fnt10Bold = new Font( bf16, 10, Font.BOLD, new Color( 100, 100, 100 ) );
System.Drawing.Bitmap headerBitmap = Properties.Resources.doc_header;
Image headerImg = Image.GetInstance( headerBitmap, Color.BLACK );

Document document = new Document( PageSize.A4, 36, 40, 20, 20 );
PdfWriter writer = PdfWriter.GetInstance( document, new FileStream( path, FileMode.Create ) );

for ( int i = 0; i < DocList.Count; i++ )
{
    PdfPTable tblHeader = new PdfPTable( new float[] { 40, 60 } );
    tblHeader.WidthPercentage = 100;

    PdfContentByte cb = writer.DirectContentUnder;
    Image img = getWatermarkedImage( cb, headerImg, "Watermark", font10Bold );

    PdfPCell cellHeader = new PdfPCell( img, true ) { Colspan = 2
      HorizontalAlignment = Element.ALIGN_LEFT,
      VerticalAlignment = Element.ALIGN_BOTTOM };
    tblHeader.AddCell( cellHeader );

    Phrase headerPhrase = new Phrase();
    headerPhrase.Add( tblHeader );

    document.Header = new HeaderFooter( headerPhrase, false );
    if ( i == 0 )
        document.Open();
    else
        document.NewPage();
}

document.Close();

getWatermarkedImage是来自this answer的Bruno Lowagie的方法。

0 个答案:

没有答案