Convert a P7M file to PDF

Searching for P7M to PDF usually means one of two jobs: pull the original PDF out of a .pdf.p7m, or turn an Italian e-invoice .xml.p7m into a readable PDF. Drop the file below — it never leaves your device.

Drop your signed files (or a folder) here

or choose from your device · .p7m · .xml.p7m · .pdf.p7m · .m7m · .tsd · .xml · Base64 from PEC email too

Your files never leave your device: they are opened and checked in your browser. No upload, no sign-up.

Quick answer

  1. Drop the .p7m (or .xml.p7m / .pdf.p7m) onto the box above.
  2. If the envelope holds a PDF, press Download — you get the original PDF, byte for byte.
  3. If it holds an Italian e-invoice (FatturaPA XML), read it with English labels, then press Download PDF for a courtesy A4 copy — or use the browser’s Print → Save as PDF.

No account, no upload. Opening one file at a time is free. For dozens of files, a ZIP of PDFs and an Excel register, see Pro (€19.99 one-time, VAT included, 14-day refund).

Two different jobs: extract vs render

“P7M to PDF” is a loose phrase. A .p7m is not a document format; it is a CAdES cryptographic envelope (PKCS#7 / CMS) around whatever was signed. What you get as a PDF depends on the payload:

Double extensions are the clue: contract.pdf.p7m vs IT01234567890_00001.xml.p7m. If the name lies, ApriP7M still detects the real type from the content and shows it above the preview.

From .pdf.p7m to PDF

  1. Drop the file on the box (or choose it from your device).
  2. You see a PDF preview and who signed it, plus an integrity result (“Signature intact” or “Signature NOT intact”).
  3. Press Download. The saved file is the original PDF, without the CAdES wrapper.

The extracted PDF is perfect to read, print or forward. It is not still digitally signed: the CAdES signature lives in the .p7m envelope. Keep the original .p7m whenever you need proof of who signed. (A different story is PAdES, where the signature sits inside a normal .pdf — ApriP7M does not verify PAdES signatures.)

From Italian .xml.p7m (FatturaPA) to a readable PDF

Raw FatturaPA XML is meant for software, not for humans. ApriP7M recognises the invoice and shows it like a normal bill, with English labels and the Italian terms in brackets where an accountant expects them (cedente/prestatore = supplier, cessionario/committente = customer, natura IVA, modalità di pagamento, and so on).

Codes such as TD01 (invoice), MP05 (bank transfer) or N6.x (reverse charge) are spelled out in English next to the code. Line descriptions written by the supplier stay as written, usually in Italian. Embedded attachments (often a PDF the supplier included) download with one click.

Steps with ApriP7M (phone included)

Works in Chrome, Edge, Firefox and Safari on Windows, Mac, Linux, iPhone and Android. On a phone, save the attachment from Mail, WhatsApp or your PEC app into Files / Downloads first, then pick it from the box. After the first visit the page can work offline. For the wider “what is a .p7m?” overview, see How to open a .p7m file.

What is checked — and what is not

ApriP7M checks cryptographic integrity: the content still matches the signature, and it shows the certificate (name, Italian tax code / codice fiscale when present, certificate authority, validity period). That is not a qualified verification. It does not consult the EU trusted lists, the Italian AgID trust list, or certificate revocation / OCSP status, and it cannot declare a document legally valid.

If you need an official validation for a tender, lawsuit or formal filing, use a qualified validator: for example Poste Italiane’s free Verificatore On Line (VOL) at vol.postecert.poste.it, or the desktop tools from certificate authorities such as Infocert Sign or Aruba Sign. Those services (or installs) can check trust and revocation; many of them also upload the file or require software. ApriP7M is an independent service with no link to those providers — it is for reading, extracting and archiving without uploading.

openssl for technical users

On Linux, macOS or Git Bash on Windows (OpenSSL 3), you can extract the payload without a browser. We re-tested these commands on OpenSSL 3.5 with our fixtures:

openssl cms -verify -noverify -binary -inform DER -in contract.pdf.p7m -out contract.pdf

-noverify skips the certificate-chain check and only extracts (plus an integrity check of the content). -binary keeps binary payloads intact. Prefer cms over the older smime subcommand for CAdES.

Important: on OpenSSL 3, a failed integrity check (“CMS Verification failure”) still writes the -out file. Do not treat that output as the signed document — delete it:

for f in *.p7m; do
  out="${f%.p7m}"
  if openssl cms -verify -noverify -binary -inform DER -in "$f" -out "$out" 2>/dev/null; then
    echo "Extracted: $out"
  else
    rm -f "$out"
    echo "Not extracted (altered or invalid): $f"
  fi
done

From a .pdf.p7m you get the PDF; from a FatturaPA .xml.p7m you get raw XML — not a readable PDF. For invoices, drop the file on the box above (or the extracted XML) to render and download a PDF.

Some PEC mailboxes save the attachment as Base64 (often starting with MII…) or PEM. Decode with the system tool first — not openssl base64 -d, which in our tests can write an empty file with no error on a single long Base64 line:

base64 -di invoice.xml.p7m > invoice.der
openssl cms -verify -noverify -binary -inform DER -in invoice.der -out invoice.xml

Nested envelopes (.p7m.p7m) need a second pass. ApriP7M unwraps nested signatures automatically.

Many files at once

Free: open one file at a time, no daily limit and no sign-up. Select several files and the free plan opens the first and tells you about the rest. The openssl loop above extracts payloads in bulk for free, but invoices stay as XML.

Pro (€19.99 one-time, VAT included, up to 3 devices, 14-day refund): drop dozens of files, a folder or a ZIP; processing stays in your browser. Then download a ZIP of PDFs (readable PDF + original XML for invoices; extracted originals for other documents) and an Excel / CSV register (supplier, number, date, net, VAT, total). Details on the pricing page.

If something goes wrong

Frequently asked questions

Is the extracted PDF the same as the signed original?

For a .pdf.p7m, yes: ApriP7M extracts the PDF exactly as it was at signing time (we verify byte identity on our test fixtures). For a .xml.p7m invoice, the PDF is a generated courtesy layout of the same data, not a file that was inside the envelope.

Does “convert P7M to PDF” remove the digital signature?

The CAdES signature stays in the .p7m file. The PDF you download is unsigned content (or a courtesy render). Always keep the original .p7m when you need proof of signature.

Can I convert P7M to PDF without uploading the file?

Yes. ApriP7M runs entirely in your browser and the tool page blocks network connections while it works. You can confirm by going offline. Avoid “converters” that ask you to upload invoices or contracts to a server unless you accept that risk.

What about xml.p7m to PDF online?

Drop the .xml.p7m here: the invoice is rendered with English labels, then use Download PDF. openssl alone only gives you the XML. The courtesy PDF is for reading and filing; the XML / .xml.p7m remains the fiscal original.

How do I convert many P7M files to PDF at once?

Free: one at a time in the browser, or openssl extraction in a loop (XML for invoices, not a readable PDF). Pro: select all files and download a ZIP of PDFs plus an Excel/CSV register for €19.99 one-time.

Does the integrity check mean the signature is legally valid?

No. It only means the content was not altered after signing. For trust-list and revocation checks, use a qualified validation service such as Poste’s VOL or your certificate authority’s software.

Can I use this on my phone?

Yes. Save the attachment to Files / Downloads, open this page in Safari or Chrome, and pick the file. Pro also works on phones within the 3-device limit.

My file starts with MII… or looks like text — is it broken?

Often it is Base64 or PEM from a PEC mailbox. ApriP7M accepts those forms. On the command line, decode with base64 -di before openssl.

Last updated 15 October 2026