Если я помесчу свою подпись на странице, ее ставят выше на той же странице после того, как я сохраняю документ, как я моJavascript

Форум по Javascript
Ответить
Anonymous
 Если я помесчу свою подпись на странице, ее ставят выше на той же странице после того, как я сохраняю документ, как я мо

Сообщение 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>
У меня есть этот код, но когда я помещаю подпись в определенную позицию, она ставит выше, чем позиция, которую я положил после того, как я сохранил документ. Я хочу, чтобы подпись осталась на месте, в котором я ее положил.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ge-after-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»