我正在创建一个PDF文件,但偶然发现了一个问题。以下是导致它的iText
命令。
document.Header = header;
document.Open();
PdfContentByte cb = writer.DirectContentUnder; (getDirectContentUnder() for java)
document
的类型为Document
; writer
是PdfWriter
,header
的类型为HeaderFooter
。
iText
对这些命令的顺序具有相同的条件,它们是:
PdfWriter
那没关系,我会按照上面的代码片段顺序编写它。但我需要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的方法。