PDFSharp 正在使用 C# 和 WPF 切割横向页面
PDFSharp is cutting landscape pages with C# and WPF
感谢您花时间阅读我关于 PDFSharp 的奇怪问题。
我当时使用 PDFSharp 库版本 1.50.4000.0(我从 1.3.2 更新并遇到同样的问题)用密码保护 PDF 文件。
该程序非常适合纵向文档,但有时我的文档方向不一。
但是文档中的横向页面总是被剪切。
供您参考的代码:
PdfDocument document = PdfReader.Open(System.IO.Path.Combine("H:/Bloq1/", file.Name), "PasswordHere");
PdfSecuritySettings securitySettings = document.SecuritySettings;
securitySettings.OwnerPassword = "PasswordHere";
securitySettings.PermitAccessibilityExtractContent = false;
securitySettings.PermitAnnotations = false;
securitySettings.PermitAssembleDocument = false;
securitySettings.PermitExtractContent = false;
securitySettings.PermitFormsFill = true;
securitySettings.PermitFullQualityPrint = true;
securitySettings.PermitModifyDocument = false;
securitySettings.PermitPrint = true;
document.Save(System.IO.Path.Combine("H:/Bloq1/", file.Name));
tbx.Text = "Complete";
tbx.Background = Brushes.ForestGreen;
提前感谢您花时间阅读或回答这个问题=D
******************************已解决*************** ******************************
我切换到 iTextSharp 并测试了几个文档并且工作得很好我将分享代码以供参考:
private void Button_Full(object sender, RoutedEventArgs e)//PROTEGE PDF PERMITIENDO IMPRESION
{
string Password = "password";
DirectoryInfo dir = new DirectoryInfo("H:/Bloq1/");
if(dir.GetFiles("*.pdf").Length ==0)
{
MessageBox.Show("There are no files in the default directory", "No Files", MessageBoxButton.OK, MessageBoxImage.Warning);
tbx.Background = Brushes.OrangeRed;
tbx.Text = "No Files Found";
}
else
{
tbx.Background = Brushes.White;
tbx.Text = "Protecting....";
foreach (FileInfo file in dir.GetFiles("*.pdf"))
{
try
{
string InputFile = System.IO.Path.Combine("H:/Bloq1/", file.Name);
string OutputFile = System.IO.Path.Combine("H:/Bloq1/", "@"+file.Name);
using (Stream input = new FileStream(InputFile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (Stream output = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
PdfReader.unethicalreading = true;
PdfReader reader = new PdfReader(input);
PdfEncryptor.Encrypt(reader, output, true, null, Password, PdfWriter.AllowPrinting);
}
}
file.Delete();
File.Move(@"H:\Bloq1\@"+file.Name, @"H:\Bloq1\"+file.Name);
tbx.Text = "Full Protected";
tbx.Background = Brushes.ForestGreen;
}
catch (Exception ex)
{
tbx.Text = "Error in: " + file.Name + ex;
tbx.Background = Brushes.IndianRed;
}
}
}
}
如果您使用 PDFsharp 的源代码版本,您可以在 PdfPage.cs 中进行此更改以查看它是否解决了您的问题:
internal PdfPage(PdfDictionary dict)
: base(dict)
{
// Set Orientation depending on /Rotate.
//int rotate = Elements.GetInteger(InheritablePageKeys.Rotate);
//if (Math.Abs((rotate / 90)) % 2 == 1)
// _orientation = PageOrientation.Landscape;
}
如果您必须进行进一步的更改才能使其正常工作,我很乐意看到反馈。
我切换到 iTextSharp 并测试了几个文档并且工作得很好我将在顶部共享代码以供参考。
谢谢大家
对于那些认为 "I switched to iText" 不是答案的人,我找到了 PDFSharp 的 "fix"。
如果不深入研究源代码,PDFSharp 似乎会在横向页面上进行冗余旋转。这更正了我使用的同时具有纵向和横向页面的文档中的横向页面。
PdfPages pageCollection = pdfDoc.Pages;
for (int i = 0; i < pageCollection.Count; i++)
{
if (pageCollection[i].Orientation.ToString().Equals("Landscape"))
{
if (pageCollection[i].Rotate == 90)
{
pageCollection[i].Orientation = PageOrientation.Portrait;
}
}
}
由于 PDFSharp 只能正确处理纵向页面上的转换,我的解决方法是使用 .page.Rotate = 0
将横向页面转换为纵向页面,然后应用我的转换,同时考虑到页面现在 侧身。在保存文件之前,我使用 .page.Rotate = 90
将页面转换回横向。工作正常!
我遇到了这个 同样 的问题,我的页面被截断了。这就是为什么旋转页面而不是直接更改 Page.Orientation
属性很重要!
感谢您花时间阅读我关于 PDFSharp 的奇怪问题。
我当时使用 PDFSharp 库版本 1.50.4000.0(我从 1.3.2 更新并遇到同样的问题)用密码保护 PDF 文件。
该程序非常适合纵向文档,但有时我的文档方向不一。
但是文档中的横向页面总是被剪切。
供您参考的代码:
PdfDocument document = PdfReader.Open(System.IO.Path.Combine("H:/Bloq1/", file.Name), "PasswordHere");
PdfSecuritySettings securitySettings = document.SecuritySettings;
securitySettings.OwnerPassword = "PasswordHere";
securitySettings.PermitAccessibilityExtractContent = false;
securitySettings.PermitAnnotations = false;
securitySettings.PermitAssembleDocument = false;
securitySettings.PermitExtractContent = false;
securitySettings.PermitFormsFill = true;
securitySettings.PermitFullQualityPrint = true;
securitySettings.PermitModifyDocument = false;
securitySettings.PermitPrint = true;
document.Save(System.IO.Path.Combine("H:/Bloq1/", file.Name));
tbx.Text = "Complete";
tbx.Background = Brushes.ForestGreen;
提前感谢您花时间阅读或回答这个问题=D
******************************已解决*************** ******************************
我切换到 iTextSharp 并测试了几个文档并且工作得很好我将分享代码以供参考:
private void Button_Full(object sender, RoutedEventArgs e)//PROTEGE PDF PERMITIENDO IMPRESION
{
string Password = "password";
DirectoryInfo dir = new DirectoryInfo("H:/Bloq1/");
if(dir.GetFiles("*.pdf").Length ==0)
{
MessageBox.Show("There are no files in the default directory", "No Files", MessageBoxButton.OK, MessageBoxImage.Warning);
tbx.Background = Brushes.OrangeRed;
tbx.Text = "No Files Found";
}
else
{
tbx.Background = Brushes.White;
tbx.Text = "Protecting....";
foreach (FileInfo file in dir.GetFiles("*.pdf"))
{
try
{
string InputFile = System.IO.Path.Combine("H:/Bloq1/", file.Name);
string OutputFile = System.IO.Path.Combine("H:/Bloq1/", "@"+file.Name);
using (Stream input = new FileStream(InputFile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (Stream output = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
PdfReader.unethicalreading = true;
PdfReader reader = new PdfReader(input);
PdfEncryptor.Encrypt(reader, output, true, null, Password, PdfWriter.AllowPrinting);
}
}
file.Delete();
File.Move(@"H:\Bloq1\@"+file.Name, @"H:\Bloq1\"+file.Name);
tbx.Text = "Full Protected";
tbx.Background = Brushes.ForestGreen;
}
catch (Exception ex)
{
tbx.Text = "Error in: " + file.Name + ex;
tbx.Background = Brushes.IndianRed;
}
}
}
}
如果您使用 PDFsharp 的源代码版本,您可以在 PdfPage.cs 中进行此更改以查看它是否解决了您的问题:
internal PdfPage(PdfDictionary dict)
: base(dict)
{
// Set Orientation depending on /Rotate.
//int rotate = Elements.GetInteger(InheritablePageKeys.Rotate);
//if (Math.Abs((rotate / 90)) % 2 == 1)
// _orientation = PageOrientation.Landscape;
}
如果您必须进行进一步的更改才能使其正常工作,我很乐意看到反馈。
我切换到 iTextSharp 并测试了几个文档并且工作得很好我将在顶部共享代码以供参考。
谢谢大家
对于那些认为 "I switched to iText" 不是答案的人,我找到了 PDFSharp 的 "fix"。
如果不深入研究源代码,PDFSharp 似乎会在横向页面上进行冗余旋转。这更正了我使用的同时具有纵向和横向页面的文档中的横向页面。
PdfPages pageCollection = pdfDoc.Pages;
for (int i = 0; i < pageCollection.Count; i++)
{
if (pageCollection[i].Orientation.ToString().Equals("Landscape"))
{
if (pageCollection[i].Rotate == 90)
{
pageCollection[i].Orientation = PageOrientation.Portrait;
}
}
}
由于 PDFSharp 只能正确处理纵向页面上的转换,我的解决方法是使用 .page.Rotate = 0
将横向页面转换为纵向页面,然后应用我的转换,同时考虑到页面现在 侧身。在保存文件之前,我使用 .page.Rotate = 90
将页面转换回横向。工作正常!
我遇到了这个 同样 的问题,我的页面被截断了。这就是为什么旋转页面而不是直接更改 Page.Orientation
属性很重要!