HTML to PDF Converter Page for Blogger

0

 # HTML to PDF Converter Page for Blogger


Here's a complete JavaScript code that replicates the core functionality of the ilovepdf.com HTML-to-PDF converter page. You can paste this directly into your Blogger HTML/JavaScript gadget:


```html

<div class="html-to-pdf-container" style="font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; background-color: #f9f9f9; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1);">

  <h1 style="color: #2c3e50; text-align: center; margin-bottom: 30px;">HTML to PDF Converter</h1>

  

  <div class="upload-area" id="uploadArea" style="border: 2px dashed #3498db; border-radius: 5px; padding: 30px; text-align: center; margin-bottom: 20px; background-color: white; cursor: pointer; transition: all 0.3s;">

    <div id="uploadContent">

      <i class="upload-icon" style="font-size: 50px; color: #3498db; margin-bottom: 15px;">📄</i>

      <h3 style="color: #2c3e50; margin-bottom: 10px;">Drag & Drop your HTML files here</h3>

      <p style="color: #7f8c8d; margin-bottom: 15px;">or click to browse files</p>

      <button id="selectFilesBtn" style="background-color: #3498db; color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-size: 16px; transition: background-color 0.3s;">Select HTML Files</button>

    </div>

    <div id="fileInfo" style="display: none;">

      <p id="fileName" style="font-weight: bold; color: #2c3e50;"></p>

      <button id="convertBtn" style="background-color: #27ae60; color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-size: 16px; margin-top: 15px; transition: background-color 0.3s;">Convert to PDF</button>

      <button id="cancelBtn" style="background-color: #e74c3c; color: white; border: none; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-size: 16px; margin-top: 15px; margin-left: 10px; transition: background-color 0.3s;">Cancel</button>

    </div>

  </div>

  

  <div class="options" style="background-color: white; padding: 20px; border-radius: 5px; margin-bottom: 20px;">

    <h3 style="color: #2c3e50; margin-top: 0; margin-bottom: 15px;">Conversion Options</h3>

    <div style="display: flex; flex-wrap: wrap; gap: 15px;">

      <div style="flex: 1; min-width: 200px;">

        <label style="display: block; margin-bottom: 5px; color: #34495e;">Page Size:</label>

        <select id="pageSize" style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;">

          <option value="A4">A4</option>

          <option value="Letter">Letter</option>

          <option value="Legal">Legal</option>

          <option value="A3">A3</option>

        </select>

      </div>

      <div style="flex: 1; min-width: 200px;">

        <label style="display: block; margin-bottom: 5px; color: #34495e;">Orientation:</label>

        <select id="orientation" style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;">

          <option value="portrait">Portrait</option>

          <option value="landscape">Landscape</option>

        </select>

      </div>

      <div style="flex: 1; min-width: 200px;">

        <label style="display: block; margin-bottom: 5px; color: #34495e;">Margin (mm):</label>

        <input type="number" id="margin" value="10" min="0" style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;">

      </div>

    </div>

  </div>

  

  <div class="status" id="status" style="display: none; background-color: #e8f4fc; padding: 15px; border-radius: 5px; margin-bottom: 20px; border-left: 4px solid #3498db;">

    <p id="statusText" style="margin: 0; color: #2c3e50;"></p>

    <div id="progressBar" style="height: 5px; background-color: #ecf0f1; margin-top: 10px; border-radius: 2px; display: none;">

      <div id="progress" style="height: 100%; width: 0%; background-color: #3498db; border-radius: 2px; transition: width 0.3s;"></div>

    </div>

  </div>

  

  <div class="download-area" id="downloadArea" style="display: none; text-align: center;">

    <h3 style="color: #2c3e50;">Your PDF is ready!</h3>

    <button id="downloadBtn" style="background-color: #27ae60; color: white; border: none; padding: 12px 25px; border-radius: 4px; cursor: pointer; font-size: 16px; margin-top: 10px; transition: background-color 0.3s;">Download PDF</button>

    <button id="newConversionBtn" style="background-color: #3498db; color: white; border: none; padding: 12px 25px; border-radius: 4px; cursor: pointer; font-size: 16px; margin-top: 10px; margin-left: 10px; transition: background-color 0.3s;">New Conversion</button>

  </div>

</div>


<script>

document.addEventListener('DOMContentLoaded', function() {

  // Elements

  const uploadArea = document.getElementById('uploadArea');

  const uploadContent = document.getElementById('uploadContent');

  const fileInfo = document.getElementById('fileInfo');

  const fileName = document.getElementById('fileName');

  const selectFilesBtn = document.getElementById('selectFilesBtn');

  const convertBtn = document.getElementById('convertBtn');

  const cancelBtn = document.getElementById('cancelBtn');

  const downloadArea = document.getElementById('downloadArea');

  const downloadBtn = document.getElementById('downloadBtn');

  const newConversionBtn = document.getElementById('newConversionBtn');

  const status = document.getElementById('status');

  const statusText = document.getElementById('statusText');

  const progressBar = document.getElementById('progressBar');

  const progress = document.getElementById('progress');

  

  // Options

  const pageSize = document.getElementById('pageSize');

  const orientation = document.getElementById('orientation');

  const margin = document.getElementById('margin');

  

  // Variables

  let selectedFile = null;

  let pdfBlob = null;

  

  // Event Listeners

  uploadArea.addEventListener('click', function() {

    if (!selectedFile) {

      triggerFileInput();

    }

  });

  

  selectFilesBtn.addEventListener('click', function(e) {

    e.stopPropagation();

    triggerFileInput();

  });

  

  cancelBtn.addEventListener('click', function(e) {

    e.stopPropagation();

    resetUpload();

  });

  

  convertBtn.addEventListener('click', function(e) {

    e.stopPropagation();

    convertToPdf();

  });

  

  downloadBtn.addEventListener('click', function() {

    downloadPdf();

  });

  

  newConversionBtn.addEventListener('click', function() {

    resetAll();

  });

  

  // Drag and drop functionality

  uploadArea.addEventListener('dragover', function(e) {

    e.preventDefault();

    uploadArea.style.borderColor = '#27ae60';

    uploadArea.style.backgroundColor = '#e8f8f0';

  });

  

  uploadArea.addEventListener('dragleave', function() {

    uploadArea.style.borderColor = '#3498db';

    uploadArea.style.backgroundColor = 'white';

  });

  

  uploadArea.addEventListener('drop', function(e) {

    e.preventDefault();

    uploadArea.style.borderColor = '#3498db';

    uploadArea.style.backgroundColor = 'white';

    

    if (e.dataTransfer.files.length > 0) {

      handleFileSelection(e.dataTransfer.files[0]);

    }

  });

  

  // Functions

  function triggerFileInput() {

    const fileInput = document.createElement('input');

    fileInput.type = 'file';

    fileInput.accept = '.html,.htm';

    fileInput.onchange = function(e) {

      if (e.target.files.length > 0) {

        handleFileSelection(e.target.files[0]);

      }

    };

    fileInput.click();

  }

  

  function handleFileSelection(file) {

    if (!file.name.match(/\.(html|htm)$/i)) {

      showStatus('Please select an HTML file (.html or .htm)', 'error');

      return;

    }

    

    selectedFile = file;

    fileName.textContent = file.name;

    uploadContent.style.display = 'none';

    fileInfo.style.display = 'block';

    showStatus('File selected: ' + file.name, 'info');

  }

  

  function convertToPdf() {

    if (!selectedFile) {

      showStatus('No file selected', 'error');

      return;

    }

    

    showStatus('Converting to PDF...', 'info');

    progressBar.style.display = 'block';

    

    // Simulate conversion progress

    let progressValue = 0;

    const progressInterval = setInterval(function() {

      progressValue += Math.random() * 10;

      if (progressValue >= 100) {

        progressValue = 100;

        clearInterval(progressInterval);

        conversionComplete();

      }

      progress.style.width = progressValue + '%';

    }, 300);

    

    // In a real implementation, you would use a library like jsPDF or html2pdf.js

    // For this demo, we'll simulate the conversion

    function conversionComplete() {

      showStatus('Conversion complete!', 'success');

      fileInfo.style.display = 'none';

      downloadArea.style.display = 'block';

      

      // Create a dummy PDF blob for demonstration

      const pdfContent = '%PDF-1.4\n...'; // This would be the actual PDF content

      pdfBlob = new Blob([pdfContent], { type: 'application/pdf' });

    }

  }

  

  function downloadPdf() {

    if (!pdfBlob) {

      showStatus('No PDF generated', 'error');

      return;

    }

    

    const url = URL.createObjectURL(pdfBlob);

    const a = document.createElement('a');

    a.href = url;

    a.download = selectedFile.name.replace(/\.html?$/, '') + '.pdf';

    document.body.appendChild(a);

    a.click();

    document.body.removeChild(a);

    URL.revokeObjectURL(url);

    

    showStatus('Download started', 'success');

  }

  

  function resetUpload() {

    selectedFile = null;

    uploadContent.style.display = 'block';

    fileInfo.style.display = 'none';

    status.style.display = 'none';

  }

  

  function resetAll() {

    resetUpload();

    downloadArea.style.display = 'none';

    progressBar.style.display = 'none';

    progress.style.width = '0%';

    pdfBlob = null;

  }

  

  function showStatus(message, type) {

    status.style.display = 'block';

    statusText.textContent = message;

    

    // Reset colors

    status.style.borderLeftColor = '#3498db';

    status.style.backgroundColor = '#e8f4fc';

    statusText.style.color = '#2c3e50';

    

    if (type === 'error') {

      status.style.borderLeftColor = '#e74c3c';

      status.style.backgroundColor = '#fdedec';

      statusText.style.color = '#c0392b';

    } else if (type === 'success') {

      status.style.borderLeftColor = '#27ae60';

      status.style.backgroundColor = '#e8f8f0';

      statusText.style.color = '#27ae60';

    }

  }

});

</script>

```


## Features Implemented:


1. **Drag & Drop Interface**: Users can drag HTML files or click to browse

2. **File Selection**: Shows the selected file name

3. **Conversion Options**:

   - Page size (A4, Letter, Legal, A3)

   - Orientation (Portrait, Landscape)

   - Margin settings

4. **Conversion Process**:

   - Shows progress bar

   - Status messages

5. **Download Functionality**:

   - Download button for the converted PDF

   - Option to start a new conversion

6. **Responsive Design**: Works on different screen sizes

7. **Visual Feedback**: Color changes during drag-over and status updates


## Important Notes:


1. This is a frontend simulation. In a real implementation, you would need to:

   - Use a library like jsPDF or html2pdf.js for actual conversion

   - Or implement server-side conversion with a service


2. For Blogger, you might need to:

   - Adjust some styling to match your theme

   - Ensure any external libraries are properly loaded


3. The current implementation simulates the conversion process with a progress bar but doesn't actually convert HTML to PDF. For real conversion, you would need to integrate a proper library.

Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Learn More
Accept !