소개

introductory post는 변환의 기본 형태를 보여줍니다: Document.ToHtml(), Document.ToMarkdown(), Document.ToDocx()를 각각 인수 없이 호출하면 합리적인 기본값을 얻습니다. 이 메서드들은 모두 옵션 객체를 받아 실제 출력물을 변경합니다 — 의미론적 마크업 대 픽셀 정확도의 복사본, 흐름에 따라 재배치되는 Word 문서 대 각 페이지의 정확한 레이아웃을 재현하는 문서.

이 게시물은 해당 옵션들을 다루며, 소개에서 전혀 다루지 않은 변환 방향도 포함합니다: PDF/A, PDF/X, PDF/UA 표준에 대해 문서를 검증하고 Document.ConvertToPdfA() 및 그 형제 표준에 부합하도록 수정하는 것.


포함 내용

HTML 내보내기: 의미론적 vs 고정

Document.ToHtml()를 옵션 없이 호출하면 문서의 구조 트리를 순회하며 흐름에 따라 재배치 가능한 마크업을 생성합니다 — 브라우저에서 어떤 너비에서도 자연스럽게 읽히는 제목과 단락들. 이 모드는 문서가 먼저 태그되어 있어야 합니다(Document.CreateStructTree() 또는 동등한 태깅 단계); 구조 트리가 없으면 내보내기는 진정한 의미론적 마크업 대신 일반적인 휴리스틱 본문으로 대체됩니다. { mode: 'fixed', fonts: 'embed' }를 전달하면 완전히 다른 렌더링 전략으로 전환됩니다: 각 페이지가 위치 지정된 SVG와 절대 위치 텍스트가 되며, 모든 임베드 가능한 폰트 프로그램이 base64 WOFF @font-face 형태로 인라인되어 독자가 폰트를 설치하지 않아도 페이지가 동일하게 보입니다.

// Semantic mode reflows from the structure tree, so this must run after the
// tagging pass: ToHtml falls back to a heuristic body when GetStructTree() is
// null, and the export loses its heading structure silently.
const semantic = doc.ToHtml();
const fixed = doc.ToHtml({ mode: 'fixed', fonts: 'embed' });

두 출력은 서로 다른 목적을 가집니다: 의미론적 HTML은 웹에서 콘텐츠를 읽거나 재게시하려는 경우에 적합하고, 고정 HTML은 페이지의 정확한 시각적 레이아웃을 브라우저에서 그대로 유지해야 할 때 적합합니다.

워드 및 벡터 내보내기

Document.ToDocx()를 옵션 없이 호출하면 재배치된 .docx이 생성됩니다: 단락과 이미지가 워드 프로세서에서 일반 문서처럼 재포맷 및 편집될 수 있습니다. 대신 { mode: 'textbox' }를 전달하면 각 페이지의 고유한 기하학을 유지하여 콘텐츠를 고정 텍스트 상자에 배치하고 재배치를 허용하지 않으며 — 편집 가능한 문서보다 시각적으로 충실한 복사본에 가깝습니다. Page.ToSvg()는 단일 페이지를 독립형 <svg> 문자열로 렌더링하며, 래스터 이미지 대신 벡터이며 해상도에 독립적인 페이지 복사가 필요할 때 유용합니다.

import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg();               // standalone <svg> string
const docx = doc.ToDocx();                       // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' });   // .docx keeping each page's own geometry

검증 및 PDF/A, PDF/X, PDF/UA 로 변환

Document.ValidatePdfA(), Document.ValidatePdfX(), Document.ValidatePdfUa()는 각각 해당 표준의 선별된 기계 검증 가능한 하위 집합에 대해 문서를 검사합니다 — 장기 보관을 위한 PDF/A (ISO 19005), 인쇄 제작을 위한 PDF/X (ISO 15930), 접근성을 위한 PDF/UA (ISO 14289-1) — 그리고 결과를 요약한 Passed 플래그가 포함된 ValidationReport을 반환합니다. Document.ConvertToPdfA()(및 동등한 ConvertToPdfX()/ConvertToPdfUa())는 문서를 해당 수준으로 보정하려 시도한 뒤 다시 검증하고, 실제 적용된 작업과 아직 해결되지 않은 문제를 나열한 ConversionReport을 반환합니다.

import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');
const pdfa = doc.ValidatePdfA('2b');
console.log(`validate: PDF/A-2b ${pdfa.Passed ? 'passes' : 'fails'}`);

// Conversion runs against a copy: the live document is still saved
// unconverted, so ConvertToPdfA must never touch it directly.
const pages = doc.Pages;
const allPages: number[] = [];
for (let i = 1; i <= pages.length; i++) allPages.push(i);
const copy = doc.ExtractPages(allPages);
const conversion = copy.ConvertToPdfA('2b');

console.log(`pdf/a convert: ${conversion.applied.length} action(s) applied, `
  + `${conversion.unresolved.length} unresolved`);
console.log(`result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);

변환이 한 번에 완전한 준수를 달성한다는 보장은 없습니다 — 남은 실패의 일반적인 원인에는 임베드되지 않은 글꼴과 누락된 출력 의도가 포함되며, 이들은 모두 conversion.unresolved에 표시됩니다.


빠른 시작

패키지를 설치한 후, 한 페이지를 SVG로 렌더링하고 전체 문서를 재배치된 HTML와 DOCX로 렌더링합니다:

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run build
import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');

const svg = doc.Pages[0].ToSvg();   // standalone <svg> string
const html = doc.ToHtml();          // reflowable HTML (falls back without a structure tree)
const docx = doc.ToDocx();          // .docx bytes, reflowed, images in the package

// fs.writeFileSync('page1.svg', svg);
// fs.writeFileSync('out.html', html);
// fs.writeFileSync('out.docx', docx);

지원되는 형식

형식확장자읽기쓰기
PDFpdf
Markdownmd
SVGsvg
TIFFtiff
DOCXdocx
HTMLhtml
PNGpng
EPUBepub

오픈 소스 및 라이선스

Aspose.PDF FOSS for TypeScript은 MIT 라이선스로 배포되며, 소스는 GitHub에 공개됩니다. 평가 워터마크, 사용 제한, 별도의 라이선스 파일이 없으며, 이 라이브러리는 로열티 없이 상용 제품에 사용할 수 있습니다.

이 패키지는 현재 버전 0.1.0이며, 활발한 초기 단계 개발을 반영합니다. Node.js (>=22)만이 요구되는 런타임이며, 패키지는 다른 서드파티 종속성이 없습니다.


시작하기

관련 리소스