Có cách nào để xác định loại tệp PDF: nếu tệp PDF hiện có là hình ảnh được quét hoặc nếu tệp được tạo từ tệp dữ liệu bằng iTextSharp và C#?cách xác định loại tệp PDF bằng cách sử dụng iTextSharp
Trả lời
Document Properties/Advanced/Pdf Nhà sản xuất
bạn có thể xây dựng được không? Một mẫu mã có lẽ ... – ESB
có lẽ bạn có thể thêm một số siêu dữ liệu để PDF mà bạn tạo ra với iTextSharp.
Tôi không tạo ra chúng - Tôi nhận được hàng tấn chúng trong thư mục của tôi và cần xác định rằng không cần mở mỗi pdf – ESB
Tôi chỉ cần thực hiện phương pháp này để thay thế các nhà sản xuất PDF sau khi tìm kiếm nơi ngay trong cửa sổ đồng hồ của đối tượng PdfWriter, nó thay đổi "PDF Creator" trong PDF vì nó là không thể truy cập bằng cách mặc định :
private static void ReplacePdfCreator(PdfWriter writer)
{
/*
Warning
*
This is not an option offered as is and i had to workaround it by using Reflection and change it
manually.
*
Alejandro
*/
Type writerType = writer.GetType();
PropertyInfo writerProperty =
writerType.GetProperties(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance)
.FirstOrDefault(p => p.PropertyType == typeof(PdfDocument));
if (writerProperty != null)
{
PdfDocument pd = (PdfDocument)writerProperty.GetValue(writer);
Type pdType = pd.GetType();
FieldInfo infoProperty =
pdType.GetFields(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance)
.FirstOrDefault(p => p.Name == "info");
if (infoProperty != null)
{
PdfDocument.PdfInfo pdfInfo = (PdfDocument.PdfInfo)infoProperty.GetValue(pd);
if (pdfInfo != null)
{
string creator = pdfInfo.GetAsString(new PdfName("Producer")).ToLowerInvariant();
if(creator.Contains("itextsharp"))
{
// created with itext sharp
}
else if(creator.Contains("adobe"))
{
// created with adobe something (distiller, photoshop, whatever)
}
else if(creator.Contains("pdfpro"))
{
// created with pdf pro
}
else if(add your own comparison here, for example a scanner manufacturer software like HP's one)
{
}
}
}
}
}
Tiêu chí của bạn là gì? Làm cách nào để phân biệt giữa các tệp PDF từ máy quét và loại tài liệu khác của bạn? Có phải số lượng ký tự được in không? Có phải số lượng diện tích trang được bao phủ bởi hình ảnh không? Có phải tên chương trình đã tạo tệp PDF không? iTextSharp có thể giúp bạn xác định các giá trị như vậy nhưng bạn phải đưa ra các tiêu chí trước. – mkl
"Làm thế nào để bạn phân biệt giữa các tệp PDF từ máy quét ..." - bạn thậm chí không thể chọn văn bản – ESB
Hhmmm, đó không nhất thiết phải là trường hợp. Có các giải pháp quét làm một số OCR bổ sung và sau đó làm phong phú thêm các tệp PDF được quét bằng văn bản ẩn nhưng có thể chọn. Và mặt khác, thật dễ dàng để tạo * một tệp PDF * từ một tệp dữ liệu bằng iTextSharp và C# * mà không có bất kỳ văn bản có thể chọn nào. Vì vậy, tôi có thể giải thích câu hỏi của bạn để bạn thực sự muốn phân biệt giữa các tệp PDF với văn bản có thể chọn và những tệp không có? – mkl