所以,我已经看到了一个新创建的文档的例子
Rectangle r = new Rectangle(400, 300);
Document doc = new Document(r);
try
{
PdfWriter.GetInstance(doc, new FileStream("C:/Blocks2.pdf", FileMode.Create));
doc.Open();
string text = @"The result can be seen below, which shows the text
having been written to the document but it looks a
mess. ";
text = text.Replace(Environment.NewLine, String.Empty).Replace(" ", String.Empty);
Font brown = new Font(Font.FontFamily.COURIER, 9f, Font.NORMAL, new BaseColor(163, 21, 21));
Font lightblue = new Font(Font.FontFamily.COURIER, 9f, Font.NORMAL, new BaseColor(43, 145, 175));
Font courier = new Font(Font.FontFamily.COURIER, 9f);
Font georgia = FontFactory.GetFont("georgia", 10f);
georgia.Color = BaseColor.GRAY;
Chunk beginning = new Chunk(text, georgia);
Phrase p1 = new Phrase(beginning);
Chunk c1 = new Chunk("You can of course force a newline using \"", georgia);
Chunk c2 = new Chunk(@"\n", brown);
Chunk c3 = new Chunk("\" or ", georgia);
Chunk c4 = new Chunk("Environment", lightblue);
Chunk c5 = new Chunk(".NewLine", courier);
Chunk c6 = new Chunk(", or even ", georgia);
Chunk c7 = new Chunk("Chunk", lightblue);
Chunk c8 = new Chunk(".NEWLINE", courier);
Chunk c9 = new Chunk(" as part of the string you give a chunk.", georgia);
Phrase p2 = new Phrase();
p2.Add(c1);
p2.Add(c2);
p2.Add(c3);
p2.Add(c4);
p2.Add(c5);
p2.Add(c6);
p2.Add(c7);
p2.Add(c8);
p2.Add(c9);
Paragraph p = new Paragraph();
p.Add(p1);
p.Add(p2);
p.Alignment = Element.ALIGN_JUSTIFIED;
doc.Add(p);
}
如您所见,文档以矩形Document doc = new Document(r);
启动
所以,这段代码的结果就像这样
我的问题是:我如何附加文本,这将考虑现有文档中的页面大小?
是否可以在文档中添加带文本的矩形?或者可以将新创建的文档附加到现有文档中?
我意识到,我应该阅读iText书籍,但我已经没时间了,这是我必须弄清楚的最后一件事。对我的问题,有一个干净的简单解决方案吗?谢谢
更新
可悲的是,出于某种原因,Alexis Pigeon的解决方案并不适合我。 我已经写过
了Document doc = new Document();
var writer = PdfWriter.GetInstance(doc, new FileStream("C:/Blocks2.pdf", FileMode.Open));
doc.Open();
并在最后
doc.Add(p); doc.Close()
虽然代码运行顺畅,但不会对文件进行任何更改。
有些东西告诉我,这种方法是错误的,因为我还没有遇到任何代码示例,人们会使用Document
和现有的pdf文件,只创建一个新的。通常是PDFStamper
或PDFWriter
。
所以,让我重新解释一下问题:如何将文字附加到现有文档以便填充某个矩形?
答案 0 :(得分:2)
所以,在环顾四周后,我发现,我正在寻找的东西叫做“连字”。不知道这个词。 要使文本适合矩形区域,您需要创建一个包含一个单元格和不可见边框的表格。我也遇到了编码方面的问题。这是代码。:
PdfReader pdf = new PdfReader("Test1.pdf");
File.Delete("C:/Blocks.pdf");
PdfStamper stp = new PdfStamper(pdf, new FileStream("C:/Blocks.pdf", FileMode.OpenOrCreate));
var canvas = stp.GetOverContent(1);
PdfPTable table = new PdfPTable(1);
table.SetTotalWidth(new float[] { 100 });
Phrase phrase = new Phrase();
phrase.Hyphenation = new HyphenationAuto("ru", "RU", 2, 2);
var bf = BaseFont.CreateFont("c:/windows/fonts/arialbd.ttf", "Cp1251", BaseFont.EMBEDDED);
phrase.Add(new Chunk("О БОЖЕ ТЫ МОЙ НЕУЖЕЛИ РАБОТАЕТ ЕСЛИ РАБОТАЕТ Я БЫЛ БЫ ТАК СЧАСТЛИВ", new Font(bf, 12)));
PdfPCell cell = new PdfPCell(phrase);
cell.Border = Rectangle.NO_BORDER;
table.AddCell(cell);
table.WriteSelectedRows(0, 1, 200, 200, canvas);
stp.Close();