我有一个函数,它正在裁剪pdf文件的特定部分并将其添加到新的Pdf文件中,但我得到的主要问题是它将页面的裁剪部分显示在底部(页脚)新创建的pdf文件。 这是代码..
public static void CropPdfFile(string sourceFilePath, string outputFilePath)
{
// Allows PdfReader to read a pdf document without the owner's password
PdfReader.unethicalreading = true;
// Reads the PDF document
using (PdfReader pdfReader = new PdfReader(sourceFilePath))
{
// Set which part of the source document will be copied.
// PdfRectangel(bottom-left-x, bottom-left-y, upper-right-x, upper-right-y)
PdfRectangle rect = new PdfRectangle(0f, 9049.172f, 594.0195f, 700.3f);
using (var output = new FileStream(outputFilePath, FileMode.CreateNew, FileAccess.Write))
{
// Create a new document
using (Document doc = new Document())
{
// Make a copy of the document
PdfSmartCopy smartCopy = new PdfSmartCopy(doc, output);
// Open the newly created document
doc.Open();
// Loop through all pages of the source document
for (int i = 4; i <= pdfReader.NumberOfPages; i++)
{
// Get a page
var page = pdfReader.GetPageN(i);
// Apply the rectangle filter we created
page.Put(PdfName.CROPBOX, rect);
page.Put(PdfName.MEDIABOX, rect);
// Copy the content and insert into the new document
smartCopy.SetLinearPageMode();
var copiedPage = smartCopy.GetImportedPage(pdfReader, i);
smartCopy.AddPage(copiedPage);
}
// Close the output document
doc.Close();
}
}
}
请帮我解决这个问题..
答案 0 :(得分:0)
PDF页面的大小(以用户单位表示)取决于媒体框的值。例如:A4页面的媒体框通常定义为[0 0 595 842]
在这种情况下,坐标系(0,0)的原点与左下角重合。右上角的坐标是(595,842)。
A4页面的另一个可能值是[0 842 595 1684]
。相同宽度(595个用户单位),相同高度(1684 - 842 = 842个用户单位),但左下角现在有坐标(0,842),右上角坐标是(595,1684)
您写道使用以下参数创建PdfRectangle
:( bottom-left-x,bottom-left-y,upper-right-x,upper-right-y)。但是,您使用的是这些硬编码值:0f, 9049.172f, 594.0195f, 700.3f
。
你的左下角(9049.172)位于比右上角y(700.3)更高的位置。这没有多大意义。因此:您应该考虑将该值更改为有意义的值。应该是什么值,这是一个只有你能回答的问题,因为只有你知道要裁剪的文件的MediaBox的价值。
在评论中,您解释说您的PDF是A4页面。您可以使用名为PdfReader
的{{1}}方法进行检查。如果您想裁剪页面以便只看到文档的标题,则需要使用以下内容:
getPageSize()
其中PdfRectangle rect = new PdfRectangle(0f, 842 - x, 595, 842);
是标题的高度。例如,如果标题是100个用户单位,那么您需要:
x
目前还不清楚为什么你总是谈论100px。如果您想将像素转换为点数,请阅读Convert Pixels to Points
使用上面提到的公式,100个像素等于75个点。