@jjlmoya/utils-converters 1.22.0 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +4 -0
- package/src/entries.ts +4 -1
- package/src/index.ts +3 -0
- package/src/shared/ImageToPdfConverter.astro +80 -0
- package/src/shared/image-to-pdf/controller.ts +173 -0
- package/src/shared/image-to-pdf/dom-views.ts +55 -0
- package/src/shared/image-to-pdf/evaluator.ts +18 -0
- package/src/shared/image-to-pdf/logic.test.ts +29 -0
- package/src/shared/image-to-pdf/logic.ts +214 -0
- package/src/shared/image-to-pdf/storage.ts +36 -0
- package/src/shared/image-to-pdf/ui.ts +39 -0
- package/src/shared/image-to-pdf.css +394 -0
- package/src/tests/i18n_coverage.test.ts +2 -3
- package/src/tests/locale_completeness.test.ts +2 -3
- package/src/tests/seo_translation_completeness.test.ts +69 -0
- package/src/tests/spanish_leakage.test.ts +5 -1
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/jpgToPdf/bibliography.astro +11 -0
- package/src/tool/jpgToPdf/bibliography.ts +12 -0
- package/src/tool/jpgToPdf/component.astro +10 -0
- package/src/tool/jpgToPdf/entry.ts +26 -0
- package/src/tool/jpgToPdf/i18n/de.ts +111 -0
- package/src/tool/jpgToPdf/i18n/en.ts +37 -0
- package/src/tool/jpgToPdf/i18n/es.ts +111 -0
- package/src/tool/jpgToPdf/i18n/fr.ts +111 -0
- package/src/tool/jpgToPdf/i18n/id.ts +111 -0
- package/src/tool/jpgToPdf/i18n/it.ts +111 -0
- package/src/tool/jpgToPdf/i18n/ja.ts +111 -0
- package/src/tool/jpgToPdf/i18n/ko.ts +111 -0
- package/src/tool/jpgToPdf/i18n/nl.ts +111 -0
- package/src/tool/jpgToPdf/i18n/pl.ts +111 -0
- package/src/tool/jpgToPdf/i18n/pt.ts +111 -0
- package/src/tool/jpgToPdf/i18n/ru.ts +111 -0
- package/src/tool/jpgToPdf/i18n/sv.ts +111 -0
- package/src/tool/jpgToPdf/i18n/tr.ts +111 -0
- package/src/tool/jpgToPdf/i18n/zh.ts +111 -0
- package/src/tool/jpgToPdf/index.ts +11 -0
- package/src/tool/jpgToPdf/jpg-to-pdf-converter.css +3 -0
- package/src/tool/jpgToPdf/seo.astro +12 -0
- package/src/tool/pngAJpg/i18n/ko.ts +1 -1
- package/src/tool/pngAJpg/i18n/ru.ts +1 -1
- package/src/tool/pngAJpg/i18n/zh.ts +1 -1
- package/src/tool/pngToPdf/bibliography.astro +11 -0
- package/src/tool/pngToPdf/bibliography.ts +12 -0
- package/src/tool/pngToPdf/component.astro +10 -0
- package/src/tool/pngToPdf/entry.ts +26 -0
- package/src/tool/pngToPdf/i18n/de.ts +111 -0
- package/src/tool/pngToPdf/i18n/en.ts +37 -0
- package/src/tool/pngToPdf/i18n/es.ts +111 -0
- package/src/tool/pngToPdf/i18n/fr.ts +111 -0
- package/src/tool/pngToPdf/i18n/id.ts +111 -0
- package/src/tool/pngToPdf/i18n/it.ts +111 -0
- package/src/tool/pngToPdf/i18n/ja.ts +111 -0
- package/src/tool/pngToPdf/i18n/ko.ts +111 -0
- package/src/tool/pngToPdf/i18n/nl.ts +111 -0
- package/src/tool/pngToPdf/i18n/pl.ts +111 -0
- package/src/tool/pngToPdf/i18n/pt.ts +111 -0
- package/src/tool/pngToPdf/i18n/ru.ts +111 -0
- package/src/tool/pngToPdf/i18n/sv.ts +111 -0
- package/src/tool/pngToPdf/i18n/tr.ts +111 -0
- package/src/tool/pngToPdf/i18n/zh.ts +111 -0
- package/src/tool/pngToPdf/index.ts +11 -0
- package/src/tool/pngToPdf/png-to-pdf-converter.css +3 -0
- package/src/tool/pngToPdf/seo.astro +12 -0
- package/src/tool/webpToPdf/bibliography.astro +11 -0
- package/src/tool/webpToPdf/bibliography.ts +12 -0
- package/src/tool/webpToPdf/component.astro +10 -0
- package/src/tool/webpToPdf/entry.ts +26 -0
- package/src/tool/webpToPdf/i18n/de.ts +111 -0
- package/src/tool/webpToPdf/i18n/en.ts +37 -0
- package/src/tool/webpToPdf/i18n/es.ts +111 -0
- package/src/tool/webpToPdf/i18n/fr.ts +111 -0
- package/src/tool/webpToPdf/i18n/id.ts +111 -0
- package/src/tool/webpToPdf/i18n/it.ts +111 -0
- package/src/tool/webpToPdf/i18n/ja.ts +111 -0
- package/src/tool/webpToPdf/i18n/ko.ts +111 -0
- package/src/tool/webpToPdf/i18n/nl.ts +111 -0
- package/src/tool/webpToPdf/i18n/pl.ts +111 -0
- package/src/tool/webpToPdf/i18n/pt.ts +111 -0
- package/src/tool/webpToPdf/i18n/ru.ts +111 -0
- package/src/tool/webpToPdf/i18n/sv.ts +111 -0
- package/src/tool/webpToPdf/i18n/tr.ts +111 -0
- package/src/tool/webpToPdf/i18n/zh.ts +111 -0
- package/src/tool/webpToPdf/index.ts +11 -0
- package/src/tool/webpToPdf/seo.astro +12 -0
- package/src/tool/webpToPdf/webp-to-pdf-converter.css +3 -0
- package/src/tools.ts +9 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { JpgToPdfLocaleContent } from '../entry';
|
|
4
|
+
import type { ImageToPdfUI } from '../../../shared/image-to-pdf/ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'omvandla-jpg-till-pdf';
|
|
7
|
+
const title = "Omvandla JPG till PDF";
|
|
8
|
+
const description = "Omvandla JPG-bilder till en ordnad PDF i din webbläsare. Välj pappersstorlek, orientering och marginaler utan att ladda upp filer.";
|
|
9
|
+
|
|
10
|
+
const ui: ImageToPdfUI = {
|
|
11
|
+
formatLabel: 'JPG',
|
|
12
|
+
dropTitle: "Skapa en PDF från dina JPG-bilder",
|
|
13
|
+
dropText: "Dra JPG-filer hit. Ordningen du väljer blir sidordningen.",
|
|
14
|
+
selectFiles: "Välj JPG-filer",
|
|
15
|
+
privacyNote: "Allt sker i webbläsaren. Dina bilder laddas aldrig upp.",
|
|
16
|
+
optionsTitle: "Utskriftsark",
|
|
17
|
+
settingsTitle: "Pappersinställningar",
|
|
18
|
+
pageSizeLabel: "Pappersstorlek",
|
|
19
|
+
a4: 'A4',
|
|
20
|
+
letter: 'Letter',
|
|
21
|
+
orientationLabel: "Orientering",
|
|
22
|
+
portrait: "Stående",
|
|
23
|
+
landscape: "Liggande",
|
|
24
|
+
marginLabel: "Marginaler",
|
|
25
|
+
pagesTitle: "Sidor",
|
|
26
|
+
reorderHint: "Ändra ordning på sidorna före export.",
|
|
27
|
+
page: "Sida",
|
|
28
|
+
pageSingular: "sida",
|
|
29
|
+
pagePlural: "sidor",
|
|
30
|
+
moveUp: "Flytta upp",
|
|
31
|
+
moveDown: "Flytta ned",
|
|
32
|
+
remove: "Ta bort",
|
|
33
|
+
emptyPages: "Dina valda bilder visas här.",
|
|
34
|
+
createPdf: "Skapa PDF",
|
|
35
|
+
reset: "Börja om",
|
|
36
|
+
ready: "Redo för dina bilder",
|
|
37
|
+
processing: "Förbereder bild",
|
|
38
|
+
error: "Kunde inte läsa bilden",
|
|
39
|
+
downloadPdf: "Ladda ned PDF",
|
|
40
|
+
building: "Skapar PDF",
|
|
41
|
+
pdfReady: "Din PDF är klar",
|
|
42
|
+
invalidFile: "Det här verktyget accepterar endast JPG- och JPEG-filer.",
|
|
43
|
+
bibliographyTitle: "Referenser",
|
|
44
|
+
faqTitle: "Vanliga frågor",
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const faq: JpgToPdfLocaleContent['faq'] = [
|
|
48
|
+
{
|
|
49
|
+
"question": "Kan jag slå ihop flera JPG-bilder till en PDF?",
|
|
50
|
+
"answer": "Ja. Välj dina JPG-filer, ordna sidorna och exportera en samlad PDF-fil."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"question": "Laddas mina bilder upp till någon server?",
|
|
54
|
+
"answer": "Nej. Hela konverteringen sker lokalt i din webbläsare."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"question": "Kan jag välja pappersstorlek som A4 eller Letter?",
|
|
58
|
+
"answer": "Ja. Du kan välja A4 eller Letter samt ställa in orientering och marginaler."
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const howTo: JpgToPdfLocaleContent['howTo'] = [
|
|
63
|
+
{
|
|
64
|
+
"name": "Välj JPG-bilder",
|
|
65
|
+
"text": "Dra dina JPG-filer eller välj dem från din enhet."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "Ordna sidor och papper",
|
|
69
|
+
"text": "Justera sidordningen, välj A4/Letter, orientering och marginaler."
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "Skapa och ladda ned PDF",
|
|
73
|
+
"text": "Klicka på Skapa PDF och ladda ned den färdiga filen."
|
|
74
|
+
}
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
const seo: JpgToPdfLocaleContent['seo'] = [
|
|
78
|
+
{
|
|
79
|
+
"type": "title",
|
|
80
|
+
"text": "Skapa ett utskriftsklart PDF-dokument från dina JPG-bilder",
|
|
81
|
+
"level": 2
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "paragraph",
|
|
85
|
+
"html": "Denna JPG till PDF-omvandlare samlar dina foton eller skannade filer i ett strukturerat PDF-dokument. Anpassa ordning och pappersinställningar snabbt."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "title",
|
|
89
|
+
"text": "Enkelt och snyggt resultat",
|
|
90
|
+
"level": 3
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"type": "list",
|
|
94
|
+
"icon": "mdi:check-circle",
|
|
95
|
+
"items": [
|
|
96
|
+
"Sortera sidorna så att dokumentet får rätt följd.",
|
|
97
|
+
"Välj stående eller liggande format utifrån bildernas form.",
|
|
98
|
+
"Justera marginalerna för perfekt utskrift på din skrivare."
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "tip",
|
|
103
|
+
"title": "Trygg och privat hantering",
|
|
104
|
+
"html": "Bearbetningen sker helt i din webbläsare så dina privata bilder stannar hos dig."
|
|
105
|
+
}
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
export const content: JpgToPdfLocaleContent = {
|
|
109
|
+
slug, title, description, ui, seo, faq, bibliography, howTo,
|
|
110
|
+
schemas: generateSchemas({ title, description, inLanguage: 'sv', faq, howTo }),
|
|
111
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { JpgToPdfLocaleContent } from '../entry';
|
|
4
|
+
import type { ImageToPdfUI } from '../../../shared/image-to-pdf/ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'jpg-pdf-donusturucu';
|
|
7
|
+
const title = "JPG PDF Dönüştürücü";
|
|
8
|
+
const description = "JPG görsellerini tarayıcınızda sıralı bir PDF dosyasına dönüştürün. Dosya yüklemeden kağıt boyutu, yönlendirme ve kenar boşluklarını seçin.";
|
|
9
|
+
|
|
10
|
+
const ui: ImageToPdfUI = {
|
|
11
|
+
formatLabel: 'JPG',
|
|
12
|
+
dropTitle: "JPG görsellerinizden PDF oluşturun",
|
|
13
|
+
dropText: "JPG dosyalarını buraya sürükleyin. Seçtiğiniz sıra sayfa sırası olacaktır.",
|
|
14
|
+
selectFiles: "JPG dosyalarını seçin",
|
|
15
|
+
privacyNote: "Her şey tarayıcıda işlenir. Görselleriniz asla sunucuya yüklenmez.",
|
|
16
|
+
optionsTitle: "Baskı sayfası",
|
|
17
|
+
settingsTitle: "Kağıt ayarları",
|
|
18
|
+
pageSizeLabel: "Kağıt boyutu",
|
|
19
|
+
a4: 'A4',
|
|
20
|
+
letter: 'Letter',
|
|
21
|
+
orientationLabel: "Yönlendirme",
|
|
22
|
+
portrait: "Dikey",
|
|
23
|
+
landscape: "Yatay",
|
|
24
|
+
marginLabel: "Kenar boşlukları",
|
|
25
|
+
pagesTitle: "Sayfalar",
|
|
26
|
+
reorderHint: "Dışa aktarmadan önce sayfa sırasını düzenleyin.",
|
|
27
|
+
page: "Sayfa",
|
|
28
|
+
pageSingular: "sayfa",
|
|
29
|
+
pagePlural: "sayfa",
|
|
30
|
+
moveUp: "Yukarı taşı",
|
|
31
|
+
moveDown: "Aşağı taşı",
|
|
32
|
+
remove: "Kaldır",
|
|
33
|
+
emptyPages: "Seçtiğiniz görseller burada görünecektir.",
|
|
34
|
+
createPdf: "PDF Oluştur",
|
|
35
|
+
reset: "Sıfırla",
|
|
36
|
+
ready: "Görselleriniz için hazır",
|
|
37
|
+
processing: "Görsel hazırlanıyor",
|
|
38
|
+
error: "Görsel okunamadı",
|
|
39
|
+
downloadPdf: "PDF İndir",
|
|
40
|
+
building: "PDF oluşturuluyor",
|
|
41
|
+
pdfReady: "PDF dosyanız hazır",
|
|
42
|
+
invalidFile: "Bu araç yalnızca JPG ve JPEG dosyalarını kabul eder.",
|
|
43
|
+
bibliographyTitle: "Kaynaklar",
|
|
44
|
+
faqTitle: "Sıkça sorulan sorular",
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const faq: JpgToPdfLocaleContent['faq'] = [
|
|
48
|
+
{
|
|
49
|
+
"question": "Birden fazla JPG görselini tek bir PDF de birleştirebilir miyim?",
|
|
50
|
+
"answer": "Evet. İstediğiniz kadar JPG dosyası seçin, sayfa sırasını düzenleyin ve tek bir PDF olarak indirin."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"question": "Görsellerim bir sunucuya yükleniyor mu?",
|
|
54
|
+
"answer": "Hayır. Tüm dönüştürme işlemi yerel olarak tarayıcınızda gerçekleşir."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"question": "A4 veya Letter kağıt boyutunu seçebilir miyim?",
|
|
58
|
+
"answer": "Evet. A4 veya Letter boyutunu, sayfa yönünü ve kenar boşluklarını belirleyebilirsiniz."
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const howTo: JpgToPdfLocaleContent['howTo'] = [
|
|
63
|
+
{
|
|
64
|
+
"name": "JPG görsellerini seçin",
|
|
65
|
+
"text": "JPG dosyalarınızı sürükleyin veya cihazınızdan seçin."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "Sayfaları ve kağıdı düzenleyin",
|
|
69
|
+
"text": "Görselleri sıralayın, A4/Letter boyutunu, yönü ve kenar boşluklarını ayarlayın."
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "PDF oluşturun ve indirin",
|
|
73
|
+
"text": "PDF Oluştur butonuna tıklayın ve belgenizi indirin."
|
|
74
|
+
}
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
const seo: JpgToPdfLocaleContent['seo'] = [
|
|
78
|
+
{
|
|
79
|
+
"type": "title",
|
|
80
|
+
"text": "JPG görsellerinizi baskıya hazır bir PDF dokümanına dönüştürün",
|
|
81
|
+
"level": 2
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "paragraph",
|
|
85
|
+
"html": "Bu JPG - PDF dönüştürücü, fotoğraflarınızı veya taramalarınızı düzenli tek bir PDF dosyasında toplamanıza olanak tanır. Sayfa sırasını ve kağıt ayarlarını kolayca yapın."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "title",
|
|
89
|
+
"text": "Düzenli ve kaliteli PDF oluşturma",
|
|
90
|
+
"level": 3
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"type": "list",
|
|
94
|
+
"icon": "mdi:check-circle",
|
|
95
|
+
"items": [
|
|
96
|
+
"Görsellerin sırasını dilediğiniz gibi düzenleyin.",
|
|
97
|
+
"Görsellerinizin yapısına göre dikey veya yatay yönü seçin.",
|
|
98
|
+
"Yazıcıdan sorunsuz çıktı almak için kenar boşluklarını ayarlayın."
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "tip",
|
|
103
|
+
"title": "%100 Gizlilik garantisi",
|
|
104
|
+
"html": "Tüm işlemler yerel olarak tarayıcınızda yapılır, dosyalarınız internete aktarılmaz."
|
|
105
|
+
}
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
export const content: JpgToPdfLocaleContent = {
|
|
109
|
+
slug, title, description, ui, seo, faq, bibliography, howTo,
|
|
110
|
+
schemas: generateSchemas({ title, description, inLanguage: 'tr', faq, howTo }),
|
|
111
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { JpgToPdfLocaleContent } from '../entry';
|
|
4
|
+
import type { ImageToPdfUI } from '../../../shared/image-to-pdf/ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'jpg-to-pdf-converter';
|
|
7
|
+
const title = "JPG 转 PDF 转换器 Tool";
|
|
8
|
+
const description = "在浏览器中将 JPG 图片转换为排版整齐的 PDF。无需上传文件,轻松选择纸张大小、方向及页边距。";
|
|
9
|
+
|
|
10
|
+
const ui: ImageToPdfUI = {
|
|
11
|
+
formatLabel: 'JPG',
|
|
12
|
+
dropTitle: "根据 JPG 图片生成 PDF",
|
|
13
|
+
dropText: "拖放 JPG 文件至此处。您排列的顺序将直接作为 PDF 的页面顺序。",
|
|
14
|
+
selectFiles: "选择 JPG 文件",
|
|
15
|
+
privacyNote: "所有转换均在本地浏览器完成,您的图片绝不会被上传。",
|
|
16
|
+
optionsTitle: "打印页面",
|
|
17
|
+
settingsTitle: "纸张设置",
|
|
18
|
+
pageSizeLabel: "纸张大小",
|
|
19
|
+
a4: 'A4',
|
|
20
|
+
letter: 'Letter',
|
|
21
|
+
orientationLabel: "方向",
|
|
22
|
+
portrait: "纵向",
|
|
23
|
+
landscape: "横向",
|
|
24
|
+
marginLabel: "页边距",
|
|
25
|
+
pagesTitle: "页面列表",
|
|
26
|
+
reorderHint: "导出前可调整页面先后顺序。",
|
|
27
|
+
page: "页",
|
|
28
|
+
pageSingular: "页",
|
|
29
|
+
pagePlural: "页",
|
|
30
|
+
moveUp: "上移",
|
|
31
|
+
moveDown: "下移",
|
|
32
|
+
remove: "删除",
|
|
33
|
+
emptyPages: "您选择的图片将显示在这里。",
|
|
34
|
+
createPdf: "生成 PDF",
|
|
35
|
+
reset: "重新开始",
|
|
36
|
+
ready: "已准备好接收图片",
|
|
37
|
+
processing: "正在准备图片",
|
|
38
|
+
error: "无法读取该图片",
|
|
39
|
+
downloadPdf: "下载 PDF",
|
|
40
|
+
building: "正在生成 PDF",
|
|
41
|
+
pdfReady: "您的 PDF 已就绪",
|
|
42
|
+
invalidFile: "本工具仅支持 JPG 和 JPEG 格式文件。",
|
|
43
|
+
bibliographyTitle: "参考文献",
|
|
44
|
+
faqTitle: "常见问题",
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const faq: JpgToPdfLocaleContent['faq'] = [
|
|
48
|
+
{
|
|
49
|
+
"question": "可以将多张 JPG 图片合并为一个 PDF 吗?",
|
|
50
|
+
"answer": "可以。只需选择需要的 JPG 文件,调整好页面先后顺序,即可导出一份完整的 PDF 文档。"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"question": "我的图片会被上传到服务器吗?",
|
|
54
|
+
"answer": "不会。所有的转换过程均在您的本地浏览器中完成。"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"question": "可以选择 A4 或 Letter 纸张规格吗?",
|
|
58
|
+
"answer": "可以。您可以自由选择 A4 或 Letter 尺寸,并调整横纵方向与页边距。"
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const howTo: JpgToPdfLocaleContent['howTo'] = [
|
|
63
|
+
{
|
|
64
|
+
"name": "选择 JPG 图片",
|
|
65
|
+
"text": "将 JPG 文件拖入区域或从设备中选择。"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "排序并设置纸张",
|
|
69
|
+
"text": "调整图片先后顺序,并设置 A4/Letter 纸张、方向及页边距。"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "生成并下载 PDF",
|
|
73
|
+
"text": "点击 '生成 PDF',就绪后保存文档到本地。"
|
|
74
|
+
}
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
const seo: JpgToPdfLocaleContent['seo'] = [
|
|
78
|
+
{
|
|
79
|
+
"type": "title",
|
|
80
|
+
"text": "将 JPG 图片快速合并为便于打印的 PDF 文档",
|
|
81
|
+
"level": 2
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "paragraph",
|
|
85
|
+
"html": "这款 JPG 转 PDF 转换器能够帮您把多张照片或扫描件整合成一个结构清晰的 PDF 文件。支持自由调整排序与页面规格。"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "title",
|
|
89
|
+
"text": "制作精美 PDF 的小技巧",
|
|
90
|
+
"level": 3
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"type": "list",
|
|
94
|
+
"icon": "mdi:check-circle",
|
|
95
|
+
"items": [
|
|
96
|
+
"按逻辑调整图片顺次,确保封面或重要照片在最前。",
|
|
97
|
+
"根据图片宽高比例选择纵向或横向版式。",
|
|
98
|
+
"适当增加页边距,防止家庭打印机打印时切边。"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "tip",
|
|
103
|
+
"title": "隐私安全无忧",
|
|
104
|
+
"html": "所有文件转换均在本地浏览器中完成,绝不会上传至任何第三方服务器。"
|
|
105
|
+
}
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
export const content: JpgToPdfLocaleContent = {
|
|
109
|
+
slug, title, description, ui, seo, faq, bibliography, howTo,
|
|
110
|
+
schemas: generateSchemas({ title, description, inLanguage: 'zh', faq, howTo }),
|
|
111
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../../types';
|
|
2
|
+
import { jpgToPdf } from './entry';
|
|
3
|
+
|
|
4
|
+
export * from './entry';
|
|
5
|
+
|
|
6
|
+
export const JPG_TO_PDF_TOOL: ToolDefinition = {
|
|
7
|
+
entry: jpgToPdf,
|
|
8
|
+
Component: () => import('./component.astro'),
|
|
9
|
+
SEOComponent: () => import('./seo.astro'),
|
|
10
|
+
BibliographyComponent: () => import('./bibliography.astro'),
|
|
11
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { jpgToPdf } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props { locale?: KnownLocale }
|
|
7
|
+
const { locale = 'en' } = Astro.props;
|
|
8
|
+
const content = await jpgToPdf.i18n[locale]?.();
|
|
9
|
+
if (!content) return null;
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
{content.seo.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -159,7 +159,7 @@ const seo: PngAJpgLocaleContent['seo'] = [
|
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"type": "paragraph",
|
|
162
|
-
"html": "
|
|
162
|
+
"html": "PNG를 JPG로 변환하는 것은 단순한 형식 변경을 넘어 웹 사이트의 성능을 향상시키고 사용자 경험을 최적화하는 핵심적인 과정입니다. 특히 고해상도 이미지가 많은 블로그, 쇼핑몰, 포트폴리오 사이트에서는 압축률이 높은 JPG 형식을 사용하는 것이 페이지 로딩 속도를 줄이는 데 필수적입니다. 본 변환기는 사용자의 브라우저 내에서 100% 로컬로 작동하므로 소중한 사진과 개인 문서의 보안을 완벽하게 지켜줍니다. 외부 서버로 파일이 업로드되지 않아 빠른 속도와 완벽한 개인정보 보호를 동시에 제공하는 최상의 이미지 변환 솔루션입니다."
|
|
163
163
|
}
|
|
164
164
|
];
|
|
165
165
|
|
|
@@ -159,7 +159,7 @@ const seo: PngAJpgLocaleContent['seo'] = [
|
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"type": "paragraph",
|
|
162
|
-
"html": "
|
|
162
|
+
"html": "Конвертация любых ваших изображений из формата PNG в JPG - это наиболее эффективный и проверенный способ существенно оптимизировать скорость загрузки страниц вашего сайта, уменьшить расход мобильного интернет-трафика и сберечь свободное дисковое пространство вашего устройства. Это особенно актуально для крупных фотогалерей, интернет-магазинов, портфолио и блогов, где высокая скорость загрузки контента играет определяющую роль в поисковом продвижении SEO, увеличении конверсии посетителей и улучшении пользовательского опыта. Благодаря использованию современных локальных технологий веб-браузера, процесс обработки и сжатия ваших графических файлов происходит с максимальной возможной скоростью и полным сохранением абсолютной конфиденциальности. Ваши исходные изображения и итоговые файлы никогда не передаются на сторонние серверы."
|
|
163
163
|
}
|
|
164
164
|
];
|
|
165
165
|
|
|
@@ -159,7 +159,7 @@ const seo: PngAJpgLocaleContent['seo'] = [
|
|
|
159
159
|
},
|
|
160
160
|
{
|
|
161
161
|
"type": "paragraph",
|
|
162
|
-
"html": "
|
|
162
|
+
"html": "将 PNG 图片转换为 JPG 格式是提升网页加载速度、节省网络流量与存储空间的极佳方案。对于图片数量较多的电商网站、个人博客、作品集以及内容管理系统而言,合理使用压缩率更高的 JPG 格式能够显著改善 Google PageSpeed 得分与 Lighthouse 性能指标。本工具完全运行于本地浏览器环境,文件无需上传至远程服务器,在保证极速转换体验的同时,能够全面守护您的数据隐私与商业机密安全。无需安装任何额外插件与桌面软件,即开即用,是您日常处理与优化图像文件的理想利器与高效助手。欢迎随时使用本工具完成日常图片转换。"
|
|
163
163
|
}
|
|
164
164
|
];
|
|
165
165
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { pngToPdf } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props { locale?: KnownLocale }
|
|
7
|
+
const { locale = 'en' } = Astro.props;
|
|
8
|
+
const content = await pngToPdf.i18n[locale]?.();
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
{content && <SharedBibliography links={content.bibliography} />}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BibliographyEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const bibliography: BibliographyEntry[] = [
|
|
4
|
+
{
|
|
5
|
+
name: 'Adobe PDF Reference 1.7',
|
|
6
|
+
url: 'https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfs/pdf_reference_1-7.pdf',
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'Portable Network Graphics Specification',
|
|
10
|
+
url: 'https://www.w3.org/TR/PNG/',
|
|
11
|
+
},
|
|
12
|
+
];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
import '../../shared/image-to-pdf.css';
|
|
3
|
+
import ImageToPdfConverter from '../../shared/ImageToPdfConverter.astro';
|
|
4
|
+
import type { ImageToPdfUI } from '../../shared/image-to-pdf/ui';
|
|
5
|
+
|
|
6
|
+
interface Props { ui: ImageToPdfUI }
|
|
7
|
+
const { ui } = Astro.props;
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<ImageToPdfConverter ui={ui} sourceFormat="png" />
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ConvertersToolEntry, ToolLocaleContent } from '../../types';
|
|
2
|
+
import type { ImageToPdfUI } from '../../shared/image-to-pdf/ui';
|
|
3
|
+
|
|
4
|
+
export type PngToPdfLocaleContent = ToolLocaleContent<ImageToPdfUI>;
|
|
5
|
+
|
|
6
|
+
export const pngToPdf: ConvertersToolEntry<ImageToPdfUI> = {
|
|
7
|
+
id: 'png-to-pdf',
|
|
8
|
+
icons: { bg: 'mdi:file-image-outline', fg: 'mdi:file-pdf-box' },
|
|
9
|
+
i18n: {
|
|
10
|
+
de: () => import('./i18n/de').then((module) => module.content),
|
|
11
|
+
en: () => import('./i18n/en').then((module) => module.content),
|
|
12
|
+
es: () => import('./i18n/es').then((module) => module.content),
|
|
13
|
+
fr: () => import('./i18n/fr').then((module) => module.content),
|
|
14
|
+
id: () => import('./i18n/id').then((module) => module.content),
|
|
15
|
+
it: () => import('./i18n/it').then((module) => module.content),
|
|
16
|
+
ja: () => import('./i18n/ja').then((module) => module.content),
|
|
17
|
+
ko: () => import('./i18n/ko').then((module) => module.content),
|
|
18
|
+
nl: () => import('./i18n/nl').then((module) => module.content),
|
|
19
|
+
pl: () => import('./i18n/pl').then((module) => module.content),
|
|
20
|
+
pt: () => import('./i18n/pt').then((module) => module.content),
|
|
21
|
+
ru: () => import('./i18n/ru').then((module) => module.content),
|
|
22
|
+
sv: () => import('./i18n/sv').then((module) => module.content),
|
|
23
|
+
tr: () => import('./i18n/tr').then((module) => module.content),
|
|
24
|
+
zh: () => import('./i18n/zh').then((module) => module.content),
|
|
25
|
+
},
|
|
26
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { PngToPdfLocaleContent } from '../entry';
|
|
4
|
+
import type { ImageToPdfUI } from '../../../shared/image-to-pdf/ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'jpg-in-pdf-umwandeln';
|
|
7
|
+
const title = "PNG in PDF Umwandler";
|
|
8
|
+
const description = "Wandeln Sie PNG-Bilder direkt im Browser in ein geordnetes PDF um. Wählen Sie Papierformat, Ausrichtung und Ränder ohne Upload.";
|
|
9
|
+
|
|
10
|
+
const ui: ImageToPdfUI = {
|
|
11
|
+
formatLabel: 'PNG',
|
|
12
|
+
dropTitle: "PDF aus PNG-Bildern erstellen",
|
|
13
|
+
dropText: "Ziehen Sie PNG-Dateien hierher. Die Reihenfolge bestimmt die Seitennummerierung.",
|
|
14
|
+
selectFiles: "PNG-Dateien auswählen",
|
|
15
|
+
privacyNote: "Alles bleibt im Browser. Ihre Bilder werden nicht hochgeladen.",
|
|
16
|
+
optionsTitle: "Druckblatt",
|
|
17
|
+
settingsTitle: "Papiereinstellungen",
|
|
18
|
+
pageSizeLabel: "Papierformat",
|
|
19
|
+
a4: 'A4',
|
|
20
|
+
letter: 'Letter',
|
|
21
|
+
orientationLabel: "Ausrichtung",
|
|
22
|
+
portrait: "Hochformat",
|
|
23
|
+
landscape: "Querformat",
|
|
24
|
+
marginLabel: "Ränder",
|
|
25
|
+
pagesTitle: "Seiten",
|
|
26
|
+
reorderHint: "Seiten vor dem Export nach oben oder unten verschieben.",
|
|
27
|
+
page: "Seite",
|
|
28
|
+
pageSingular: "Seite",
|
|
29
|
+
pagePlural: "Seiten",
|
|
30
|
+
moveUp: "Nach oben",
|
|
31
|
+
moveDown: "Nach unten",
|
|
32
|
+
remove: "Entfernen",
|
|
33
|
+
emptyPages: "Ihre ausgewählten Bilder erscheinen hier.",
|
|
34
|
+
createPdf: "PDF erstellen",
|
|
35
|
+
reset: "Neu starten",
|
|
36
|
+
ready: "Bereit für Ihre Bilder",
|
|
37
|
+
processing: "Bild wird vorbereitet",
|
|
38
|
+
error: "Bild konnte nicht gelesen werden",
|
|
39
|
+
downloadPdf: "PDF herunterladen",
|
|
40
|
+
building: "PDF wird erstellt",
|
|
41
|
+
pdfReady: "Ihr PDF ist bereit",
|
|
42
|
+
invalidFile: "Dieses Tool akzeptiert nur PNG- und JPEG-Dateien.",
|
|
43
|
+
bibliographyTitle: "Referenzen",
|
|
44
|
+
faqTitle: "Häufig gestellte Fragen",
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const faq: PngToPdfLocaleContent['faq'] = [
|
|
48
|
+
{
|
|
49
|
+
"question": "Kann ich mehrere PNG-Bilder in ein PDF zusammenfügen?",
|
|
50
|
+
"answer": "Ja. Wählen Sie beliebig viele PNG-Dateien aus, ordnen Sie die Seiten an und exportieren Sie ein einzelnes PDF."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"question": "Werden meine Bilder auf einen Server hochgeladen?",
|
|
54
|
+
"answer": "Nein. Alle Bilder werden lokal im Browser verarbeitet und verlassen Ihr Gerät nicht."
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"question": "Kann ich das Papierformat wählen?",
|
|
58
|
+
"answer": "Ja. Sie können A4 oder Letter sowie Hoch- oder Querformat und Ränder festlegen."
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const howTo: PngToPdfLocaleContent['howTo'] = [
|
|
63
|
+
{
|
|
64
|
+
"name": "PNG-Bilder auswählen",
|
|
65
|
+
"text": "Ziehen Sie Ihre PNG-Dateien in den Arbeitsbereich oder wählen Sie diese über den Dateidialog aus."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "Seiten anordnen",
|
|
69
|
+
"text": "Verschieben Sie die Seiten in die gewünschte Reihenfolge und legen Sie Papierformat und Ränder fest."
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "PDF erstellen",
|
|
73
|
+
"text": "Klicken Sie auf PDF erstellen und laden Sie das Dokument herunter."
|
|
74
|
+
}
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
const seo: PngToPdfLocaleContent['seo'] = [
|
|
78
|
+
{
|
|
79
|
+
"type": "title",
|
|
80
|
+
"text": "PNG-Bilder in ein druckfähiges PDF verwandeln",
|
|
81
|
+
"level": 2
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "paragraph",
|
|
85
|
+
"html": "Dieser PNG-in-PDF-Umwandler ermöglicht es Ihnen, mehrere Fotos oder Scans in ein einziges, übersichtliches PDF-Dokument zusammenzufügen. Passen Sie die Reihenfolge und die Papiereinstellungen individuell an."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "title",
|
|
89
|
+
"text": "Saubere Dokumente ohne Qualitätsverlust",
|
|
90
|
+
"level": 3
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"type": "list",
|
|
94
|
+
"icon": "mdi:check-circle",
|
|
95
|
+
"items": [
|
|
96
|
+
"Sortieren Sie Ihre Bilder für eine perfekte Seitenabfolge.",
|
|
97
|
+
"Wählen Sie das Hochformat für Standarddokumente oder Querformat für Breitmotive.",
|
|
98
|
+
"Erhöhen Sie die Ränder für einen optimalen Ausdruck auf Heimdruckern."
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "tip",
|
|
103
|
+
"title": "Maximale Privatsphäre garantiert",
|
|
104
|
+
"html": "Da die Konvertierung komplett im Browser stattfindet, bleiben vertrauliche Dokumente und persönliche Fotos geschützt."
|
|
105
|
+
}
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
export const content: PngToPdfLocaleContent = {
|
|
109
|
+
slug, title, description, ui, seo, faq, bibliography, howTo,
|
|
110
|
+
schemas: generateSchemas({ title, description, inLanguage: 'de', faq, howTo }),
|
|
111
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { generateSchemas } from '../../../shared/logic/schemas';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { PngToPdfLocaleContent } from '../entry';
|
|
4
|
+
import type { ImageToPdfUI } from '../../../shared/image-to-pdf/ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'png-to-pdf-converter';
|
|
7
|
+
const title = 'PNG to PDF Converter';
|
|
8
|
+
const description = 'Turn PNG images into an ordered PDF in your browser. Keep transparent artwork readable on paper without uploading files.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageToPdfUI = {
|
|
11
|
+
formatLabel: 'PNG', dropTitle: 'Build a PDF from your PNG images', dropText: 'Drop one or more PNG files here. The order you choose becomes the page order.', selectFiles: 'Select PNG files', privacyNote: 'Everything stays in this browser. Your images are never uploaded.', optionsTitle: 'Print sheet', settingsTitle: 'Paper settings', pageSizeLabel: 'Paper size', a4: 'A4', letter: 'Letter', orientationLabel: 'Orientation', portrait: 'Portrait', landscape: 'Landscape', marginLabel: 'Margins', pagesTitle: 'Pages', reorderHint: 'Move pages up or down before exporting.', page: 'Page', pageSingular: 'page', pagePlural: 'pages', moveUp: 'Move up', moveDown: 'Move down', remove: 'Remove', emptyPages: 'Your selected images will appear here.', createPdf: 'Create PDF', reset: 'Start over', ready: 'Ready for your images', processing: 'Preparing image', error: 'Could not read this PNG', downloadPdf: 'Download PDF', building: 'Building PDF', pdfReady: 'Your PDF is ready', invalidFile: 'This tool accepts PNG files only.', bibliographyTitle: 'References', faqTitle: 'Frequently asked questions',
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const faq: PngToPdfLocaleContent['faq'] = [
|
|
15
|
+
{ question: 'Can I combine several PNG files into one PDF?', answer: 'Yes. Select several PNG files, arrange their pages, and export them as one document.' },
|
|
16
|
+
{ question: 'Will transparent PNG areas become printable?', answer: 'Yes. Transparent areas are placed over white while the PDF is prepared, giving the printed page a predictable background.' },
|
|
17
|
+
{ question: 'Does the PNG to PDF converter send my artwork online?', answer: 'No. The conversion happens locally in your browser and the files remain on your device.' },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const howTo: PngToPdfLocaleContent['howTo'] = [
|
|
21
|
+
{ name: 'Select PNG artwork', text: 'Drop PNG files into the workspace or use the file picker to choose them locally.' },
|
|
22
|
+
{ name: 'Arrange the pages', text: 'Move pages up or down until the document follows the order you want to print or share.' },
|
|
23
|
+
{ name: 'Choose paper and export', text: 'Set paper size, orientation and margins, then create and download the PDF.' },
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
const seo: PngToPdfLocaleContent['seo'] = [
|
|
27
|
+
{ type: 'title', text: 'Create a printable PDF from PNG artwork', level: 2 },
|
|
28
|
+
{ type: 'paragraph', html: 'PNG is a practical source for screenshots, diagrams and transparent illustrations. This converter turns a selected sequence of PNG files into one PDF with paper settings that are ready for printing.' },
|
|
29
|
+
{ type: 'title', text: 'Use the page list as a final proof', level: 3 },
|
|
30
|
+
{ type: 'list', icon: 'mdi:check-circle', items: ['Put screenshots in the order of the process they explain.', 'Choose landscape for wide diagrams and interface captures.', 'Use a larger margin when your printer cannot print to the edge.', 'Remember that transparent pixels are placed on white for predictable output.'] },
|
|
31
|
+
{ type: 'tip', title: 'A private workflow for sensitive screenshots', html: 'The files never leave the browser during conversion, which makes this workflow useful for private documentation and internal diagrams.' },
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
export const content: PngToPdfLocaleContent = {
|
|
35
|
+
slug, title, description, ui, seo, faq, bibliography, howTo,
|
|
36
|
+
schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
|
|
37
|
+
};
|