我需要在ASP.NET的PDF文档中使用从用户下拉列表中选择的新单词替换单词。我正在使用iTextSharp,但创建的新PDF全部失真,因为我无法在提取时提取PDF的格式/样式信息。另外,有没有办法逐行阅读pdf?请帮忙..
protected void Page_Load(object sender, EventArgs e)
{
String s = DropDownList1.SelectedValue;
Response.Write(s);
ListFieldNames(s);
}
private void CreatePDF(string text)
{
string outFileName = @"z:\TEMP\PDF\Test_abc.pdf";
Document doc = new Document();
doc.SetMargins(30f, 30f, 30f, 30f);
PdfWriter.GetInstance(doc, new FileStream(outFileName, FileMode.Create));
doc.Open();
BaseFont bfTimes = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1252, false);
Font times = new Font(bfTimes, 12, Font.BOLDITALIC);
//Chunk ch = new Chunk(text,times);
Paragraph para = new Paragraph(text,times);
//para.SpacingAfter = 9f;
para.Alignment = Element.ALIGN_CENTER;
//para.IndentationLeft = 100;
doc.Add(para);
//doc.Add(new Paragraph(text,times));
doc.Close();
Response.Redirect(@"z:\TEMP\PDF\Test_abc.pdf",false);
}
private void ListFieldNames(string s)
{
ArrayList arrCheck = new ArrayList();
try
{
string pdfTemplate = @"z:\TEMP\PDF\abc.pdf";
//string dest = @"z:\TEMP\PDF\Test_abc.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
string pdfText = string.Empty;
string extracttext = "";
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy();
PdfReader reader = new PdfReader((string)pdfTemplate);
extracttext = PdfTextExtractor.GetTextFromPage(reader, page, its);
extracttext = Encoding.Unicode.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.Unicode, Encoding.Default.GetBytes(extracttext)));
pdfText = pdfText + extracttext;
pdfText = pdfText.Replace("[xyz]", s);
pdfReader.Close();
}
CreatePDF(pdfText);
}
catch (Exception ex)
{
}
finally
{
}
}
答案 0 :(得分:2)
你正在做出一个错误的假设。
TextRenderInfo
对象,其中包含绘制的文本部分及其坐标。一行可以包含多个文本片段。文本片段可能包含空格,甚至可能为空。LocationTextExtractionStrategy
将订购所有文字片段,必要时重建字词。例如:它会将“He”和“llo”连接到“Hello”,因为“He”片段和“llo”片段之间没有足够的空间。但是,由于原因未知(可能是无知),您使用的SimpleTextExtractionStrategy
不会根据文本的位置对文字进行排序。所有这些错误的假设几乎让我想对你的问题投反对票。冒着被自己投票给这个答案的风险,我必须告诉你,你不应该试着“做同样的事情”。你问的是非常复杂的东西,在许多情况下甚至是不可能的!