Функциональность подписи в документах PDF < /p>
const incedSignatureInpdf = async () => {
if (! try {
let existingPdfBytes = null;
if (uploadedPdfBytes) {
existingPdfBytes = uploadedPdfBytes;
} else if (pdfUrl) {
try {
const response = await fetch(pdfUrl);
if (!response.ok) {
throw new Error(`Failed to fetch PDF: ${response.status} ${response.statusText}`);
}
existingPdfBytes = await response.arrayBuffer();
} catch (fetchError) {
console.error('Error fetching PDF:', fetchError);
return null;
}
} else {
return null;
}
const pdfDoc = await PDFDocument.load(existingPdfBytes, {
ignoreEncryption: true,
updateMetadata: false,
throwOnInvalidObject: false
});
const helveticaFont = await pdfDoc.embedFont(StandardFonts.HelveticaOblique);
const pages = pdfDoc.getPages();
if (pages.length === 0) {
return null;
}
const page = pages[selectedPageIndex];
const iframe = iframeRef.current;
const container = pdfContainerRef.current;
if (!iframe || !container) {
return null;
}
// Get container dimensions (more accurate than iframe)
const containerRect = container.getBoundingClientRect();
const displayWidth = containerRect.width;
const displayHeight = containerRect.height;
const pdfWidth = page.getWidth();
const pdfHeight = page.getHeight();
const scaleX = pdfWidth / displayWidth;
const scaleY = pdfHeight / displayHeight;
const sigPos = signatureDisplayPos || { left: 100, top: 100 };
// Adjust for any container padding/offset
const x = sigPos.left * scaleX;
// PDF coordinates start from bottom-left, so we need to flip Y
// Increase downward adjustment to three times more than current amount
const y = pdfHeight - (sigPos.top * scaleY) - 60; // Move 60 pixels down (three times the current 20)
if (signatureData.method === 'typed') {
const fontSize = 24;
page.drawText(signatureData.value, {
x,
y: y + fontSize, // Keep the text baseline adjustment
size: fontSize,
font: helveticaFont,
color: rgb(0, 0, 0),
});
pdfDoc.setTitle(`Signed: ${pdfDoc.getTitle() || 'Document'}`);
pdfDoc.setSubject('Electronically Signed Document');
} else if (signatureData.method === 'drawn' || signatureData.method === 'image') {
let image;
try {
if (signatureData.value.startsWith('data:image/jpeg')) {
image = await pdfDoc.embedJpg(signatureData.value);
} else {
image = await pdfDoc.embedPng(signatureData.value);
}
const dims = image.scale(0.5);
page.drawImage(image, {
x,
y: y + dims.height,
width: dims.width,
height: dims.height,
});
pdfDoc.setTitle(`Signed: ${pdfDoc.getTitle() || 'Document'}`);
pdfDoc.setSubject('Electronically Signed Document');
} catch (err) {
console.error('Error embedding signature image:', err);
throw err;
}
}
const pdfBytes = await pdfDoc.save({
useObjectStreams: false,
addDefaultPage: false,
objectsPerTick: 50
});
const blob = new Blob([pdfBytes], { type: 'application/pdf' });
return blob;
} catch (err) {
console.error('Failed to embed signature:', err);
throw err;
}
};
< /code>
У меня есть этот код, но когда я помещаю подпись в определенную позицию, она ставит выше, чем позиция, которую я положил после того, как я сохранил документ. Я хочу, чтобы подпись осталась на месте, в котором я ее положил.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ge-after-i
Если я помесчу свою подпись на странице, ее ставят выше на той же странице после того, как я сохраняю документ, как я мо ⇐ Javascript
Форум по Javascript
1757848724
Anonymous
Функциональность подписи в документах PDF < /p>
const incedSignatureInpdf = async () => {
if (! try {
let existingPdfBytes = null;
if (uploadedPdfBytes) {
existingPdfBytes = uploadedPdfBytes;
} else if (pdfUrl) {
try {
const response = await fetch(pdfUrl);
if (!response.ok) {
throw new Error(`Failed to fetch PDF: ${response.status} ${response.statusText}`);
}
existingPdfBytes = await response.arrayBuffer();
} catch (fetchError) {
console.error('Error fetching PDF:', fetchError);
return null;
}
} else {
return null;
}
const pdfDoc = await PDFDocument.load(existingPdfBytes, {
ignoreEncryption: true,
updateMetadata: false,
throwOnInvalidObject: false
});
const helveticaFont = await pdfDoc.embedFont(StandardFonts.HelveticaOblique);
const pages = pdfDoc.getPages();
if (pages.length === 0) {
return null;
}
const page = pages[selectedPageIndex];
const iframe = iframeRef.current;
const container = pdfContainerRef.current;
if (!iframe || !container) {
return null;
}
// Get container dimensions (more accurate than iframe)
const containerRect = container.getBoundingClientRect();
const displayWidth = containerRect.width;
const displayHeight = containerRect.height;
const pdfWidth = page.getWidth();
const pdfHeight = page.getHeight();
const scaleX = pdfWidth / displayWidth;
const scaleY = pdfHeight / displayHeight;
const sigPos = signatureDisplayPos || { left: 100, top: 100 };
// Adjust for any container padding/offset
const x = sigPos.left * scaleX;
// PDF coordinates start from bottom-left, so we need to flip Y
// Increase downward adjustment to three times more than current amount
const y = pdfHeight - (sigPos.top * scaleY) - 60; // Move 60 pixels down (three times the current 20)
if (signatureData.method === 'typed') {
const fontSize = 24;
page.drawText(signatureData.value, {
x,
y: y + fontSize, // Keep the text baseline adjustment
size: fontSize,
font: helveticaFont,
color: rgb(0, 0, 0),
});
pdfDoc.setTitle(`Signed: ${pdfDoc.getTitle() || 'Document'}`);
pdfDoc.setSubject('Electronically Signed Document');
} else if (signatureData.method === 'drawn' || signatureData.method === 'image') {
let image;
try {
if (signatureData.value.startsWith('data:image/jpeg')) {
image = await pdfDoc.embedJpg(signatureData.value);
} else {
image = await pdfDoc.embedPng(signatureData.value);
}
const dims = image.scale(0.5);
page.drawImage(image, {
x,
y: y + dims.height,
width: dims.width,
height: dims.height,
});
pdfDoc.setTitle(`Signed: ${pdfDoc.getTitle() || 'Document'}`);
pdfDoc.setSubject('Electronically Signed Document');
} catch (err) {
console.error('Error embedding signature image:', err);
throw err;
}
}
const pdfBytes = await pdfDoc.save({
useObjectStreams: false,
addDefaultPage: false,
objectsPerTick: 50
});
const blob = new Blob([pdfBytes], { type: 'application/pdf' });
return blob;
} catch (err) {
console.error('Failed to embed signature:', err);
throw err;
}
};
< /code>
У меня есть этот код, но когда я помещаю подпись в определенную позицию, она ставит выше, чем позиция, которую я положил после того, как я сохранил документ. Я хочу, чтобы подпись осталась на месте, в котором я ее положил.
Подробнее здесь: [url]https://stackoverflow.com/questions/79764263/if-i-place-my-signature-on-a-page-its-being-put-higher-on-the-same-page-after-i[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия