mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-17 10:06:17 +08:00
a0eeed0cdb
I used [pdfmake](https://www.npmjs.com/package/pdfmake) to implement an "export as PDF" feature, and I am happy to share with you! This should fix #13577, fix #8846, and fix #13959. A showcase: [Getting Started.pdf](https://github.com/user-attachments/files/24013057/Getting.Started.pdf) Although it might miss rendering some properties currently, it can evolve in the long run and provide a more native experience for the users. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** - Experimental "Export to PDF" option added to the export menu (behind a feature flag) - PDF export supports headings, paragraphs, lists, code blocks, tables, images, callouts, linked documents and embedded content * **Chores** - Added PDF rendering library and consolidated PDF utilities - Feature flag introduced to control rollout * **Tests** - Comprehensive unit tests added for PDF content rendering logic <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: DarkSky <darksky2048@gmail.com>
33 lines
802 B
TypeScript
33 lines
802 B
TypeScript
import {
|
|
docLinkBaseURLMiddleware,
|
|
embedSyncedDocMiddleware,
|
|
PdfAdapter,
|
|
titleMiddleware,
|
|
} from '@blocksuite/affine-shared/adapters';
|
|
import type { Store } from '@blocksuite/store';
|
|
|
|
import { download } from './utils.js';
|
|
|
|
async function exportDoc(doc: Store) {
|
|
const provider = doc.provider;
|
|
const job = doc.getTransformer([
|
|
docLinkBaseURLMiddleware(doc.workspace.id),
|
|
titleMiddleware(doc.workspace.meta.docMetas),
|
|
embedSyncedDocMiddleware('content'),
|
|
]);
|
|
const snapshot = job.docToSnapshot(doc);
|
|
if (!snapshot) {
|
|
return;
|
|
}
|
|
const adapter = new PdfAdapter(job, provider);
|
|
const { file } = await adapter.fromDocSnapshot({
|
|
snapshot,
|
|
assets: job.assetsManager,
|
|
});
|
|
download(file.blob, file.fileName);
|
|
}
|
|
|
|
export const PdfTransformer = {
|
|
exportDoc,
|
|
};
|