"C:\\pdfs\\"
디렉토리에 pdf
개의 파일이 있습니다. 이 PDF 파일을 가져 와서 meta_data.txt
파일에서 메타 데이터를 삽입하고 싶습니다. iTextSharp 지식의 내 잠금 장치로,이 같은 코드 : 창조 temp
디렉토리, metadatas를 주입하고 나중에 created
디렉토리를 이동하면서페이지를 회전하고 싶지 않지만 iTextSharp가 프로그래밍 방식으로 내 페이지를 회전합니다.
var pdf_files = Directory.GetFiles("C:\\pdfs\\", "*.pdf");
var i = 0;
foreach (var pdf_file in pdf_files)
{
var read = new PdfReader(pdf_file);
var size = read.GetPageSizeWithRotation(1);
var document = new Document(size);
var write = PdfWriter.GetInstance(document, new FileStream("C:\\temp\\" + "file_" + i, FileMode.Create, FileAccess.Write));
var datas = File.ReadAllLines("C:\\pdfs\\" + @"meta_data.txt");
var str = datas[i].Split('@');
document.AddTitle(str[1]);
document.AddSubject(str[2]);
document.AddCreator(str[3]);
document.AddAuthor(str[4]);
document.AddKeywords(str[5]);
document.Open();
var cb = write.DirectContent;
for (var pageNum = 1; pageNum <= read.NumberOfPages; pageNum++)
{
document.NewPage();
var page = write.GetImportedPage(read, pageNum);
cb.AddTemplate(page, 0, 0);
}
document.Close();
read.Close();
File.Delete(pdf_file);
File.Move("C:\\temp\\" + "file_" + i, "C:\\created\\" + "file_" + i);
i++;
}
이 코드는, 주요 PDF 파일의 인스턴스를 얻을. 나는 이것보다 더 실용적인 방법을 찾지 못한다. 어쨌든, 일부 pdf 파일 (원본 pdf 파일로 생성 됨)에는 다음과 같은 문제가 없습니다. 그러나 일부 다른 pdf 파일 (스캔 또는 날짜가 오래된 pdf 파일에서 생성 됨)은 프로그래밍 방식으로 회전됩니다. 그리고 이것은 다음과 같이 역겨운 것처럼 보입니다. 모두보다 나쁘지 만 문제를 해결하는 방법을 모르겠습니다. 이 문제를 어떻게 관리 할 수 있는지 알려주세요.
이유는 원래의 페이지의 모든 속성을 복사하지 않는 itext로 문서를 병합하는 것이 최적의 방법이 아니라는 것입니다. 왜냐하면 관련된 방법이 다른 유스 케이스에 맞게 설계 되었기 때문입니다. 'PdfWriter' 대신'PdfCopy'를 기반으로하는 병합 솔루션을 사용하십시오 (cf. [이 답변] (http://stackoverflow.com/a/15945467/1729265). – mkl
공식 문서를 읽으십시오. http://developers.itextpdf.com/examples/miscellaneous/adding-metadata –