现在我正在使用iTextSharp从PDF中提取线条和矩形。我使用的方法如下:
PdfReader reader = new PdfReader(strPDFFileName);
var pageSize = reader.GetPageSize(1);
var cropBox = reader.GetCropBox(1);
byte[] pageBytes = reader.GetPageContent(1);
PRTokeniser tokeniser = new PRTokeniser(new(RandomAccessFileOrArray(pageBytes));
PRTokeniser.TokType tokenType;
string tokenValue;
CoordinateCollection cc = new CoordinateCollection();
while (tokeniser.NextToken())
{
tokenType = tokeniser.TokenType;
tokenValue = tokeniser.StringValue;
if (tokenType == PRTokeniser.TokType.OTHER)
{
if (tokenValue == "re")
{
if (buf.Count < 5)
{
continue;
}
float x = float.Parse(buf[buf.Count - 5]);
float y = float.Parse(buf[buf.Count - 4]);
float w = float.Parse(buf[buf.Count - 3]);
float h = float.Parse(buf[buf.Count - 2]);
Coordinate co = new Coordinate();
co.type = "re";
co.X1 = x;
co.Y1 = y;
co.W = w;
co.H = h;
cc.AddCoordinate(co);
}
}
}
代码工作正常。但是我遇到了关于PDF测量单元的问题。来自reader.getPageSize的值是(619 * 792),这意味着页面大小是691 * 792,但是当我从tokeniser获取矩形时,x和y总是超过页面大小,它的值总是x = 150,Y = 4200,W = 1500,H = 2000。
我相信reader.getPageSize和tokeniser的测量单位是不同的。
那么请你帮忙告诉我如何转换它们?