I am showing a pdf as image or directly image depending on situation which include bar barcodes and depending on situation i generate it. There is not any problem on print preview of browser but when they printed some of the barcodes are not readable for barcode reader. What is the best way to show and print them? This is my code:
<style>
img {
height: 6IN;
width: 4IN;
}
.new-page {
page-break-before: always;
}
p {
font-size: 70%;
}
b {
font-size: 70%;
}
</style>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/barcodes/JsBarcode.code128.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.10.377/pdf.min.js"></script>
@{
int i = 0;
int j = 0;
int page = 1;
int cnt = 1;
}
@foreach (var item in Model)
{
if (item.Platform == "Walmart")
{
<div class="row new-page">
<div class="col-12">
<canvas id="[email protected]" style="width:100%; height:auto;"></canvas>
@* <img src="@item.Image" onload="generateBarcodeAndPrint('@item.OrderId')"/>
*@
</div>
</div>
<script>
// URL to your base64 encoded PDF
var pdfData = '@Html.Raw(item.Image)';
var orderId = '@item.OrderId';
// Load the PDF data using pdf.js
pdfjsLib.getDocument({ data: atob(pdfData) }).promise.then(function(pdf) {
// Render the first page as an image
pdf.getPage(1).then(function(page) {
var canvas = document.getElementById('[email protected]');
var context = canvas.getContext('2d');
var viewport = page.getViewport({ scale: 2 });
canvas.width = viewport.width;
canvas.height = viewport.height;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext).promise.then(function() {
@* if (@((page+1) / 2 == Model.Count ? "true" : "false")) {
window.print();
}*@
});
});
});
</script>
@if (item.TotalCount > 1)
{
string s;
}
@while (cnt != item.TotalCount)
{
cnt++;
}
@if (cnt == item.TotalCount)
{
cnt = 1;
var orders = Model.Where(w => w.OrderId == item.OrderId).ToList();
<div class="row new-page">
<br>
<div class="col-12">
<p style="font-size:14px;text-align:center;vertical-align:bottom;">@(page)</p>
@if (item.OrderNavigation.ShipServiceLevel == null)
{
<p>@item.CreateDate</p>
}
else if (item.OrderNavigation.ShipServiceLevel == "Econ US Dom")
{
<p>@item.OrderNavigation.ShipServiceLevel | @item.CreateDate</p>
}
else
{
<b style="text-align:center;">@item.OrderNavigation.ShipServiceLevel | @item.CreateDate</b>
}
</div>
<hr>
<div class="col-12">
@* <b class="text-center" style="text-align:center;font-size:80%;"> Quantity: @ViewBag.shippings[j].Items[0].Quantity</b>
*@
<!-- Generate barcode for OrderId -->
<canvas id="[email protected]" style="width:90%;height:20%;"></canvas>
<script>
// Function to generate barcode for each OrderId
function generateBarcodeForOrderId(id, orderId) {
JsBarcode("#barcodeCanvas-" + id, orderId, { format: "CODE128" });
//setTimeout(function () {
// window.print();
//}, 500);
}
generateBarcodeForOrderId("@item.Id", "@item.OrderId");
// Call the function with the current OrderId
//window.onload = function () {
// // Call the function with the current OrderId
// generateBarcodeForOrderId("@item.OrderId");
//};
</script>
</div>
<hr>
<div class="col-12">
<p>@item.OrderNavigation.Address</p>
</div>
@foreach (var ittem in orders)
{
<hr>
<p style="text-align:center;">Quantity</p>
<div style="border: 2px solid #000; width: fit-content; padding: 10px; text-align: center; margin: auto;">
<h3> @ittem.OrderNavigation.Quantity</h3>
</div>
<br />
<div class="col-12">
<b class="text-center" style="text-align:center;">@ittem.OrderNavigation.Title</b>
</div>
<hr>
<div class="col-12">
<b class="text-center" style="text-align:center;">SKU: @ittem.OrderNavigation.Sku</b>
</div>
<hr>
<div class="col-12">
<b class="text-center" style="text-align:center;">Label Count: @item.TotalCount</b>
</div>
}
</div>
page++;
j++;
}
else
{
@* cnt++;
*@ j++;
}
}
else
{
<div class="row new-page">
<div class="col-12">
<img src="@item.Image" style="width:97%; height:auto;" onload="generateBarcodeAndPrint('@item.Id','@item.OrderId')" />
</div>
</div>
@while (cnt != item.TotalCount)
{
cnt++;
}
@if (cnt == item.TotalCount)
{
cnt = 1;
var orders = Model.Where(w => w.OrderId == item.OrderId).ToList();
<div class="row new-page">
<br>
<div class="col-12">
<p style="font-size:14px;text-align:center;vertical-align:bottom;">@(page)</p>
@{
var v = item.OrderNavigation.ShipServiceLevel;
int g = 6;
}
@if (item.OrderNavigation.ShipServiceLevel == null)
{
<p>@item.CreateDate</p>
}
else if (item.OrderNavigation.ShipServiceLevel == "Econ US Dom")
{
<p>@item.OrderNavigation.ShipServiceLevel | @item.CreateDate</p>
}
else
{
<b style="text-align:center;">@item.OrderNavigation.ShipServiceLevel | @item.CreateDate</b>
}
</div>
@* <b class="text-center" style="text-align:center;font-size:80%;"> Quantity: @ViewBag.itemdet[i].Payload.OrderItems[0].QuantityOrdered</b>
*@
<!-- Generate barcode for OrderId -->
<canvas id="[email protected]" style="width:90%;"></canvas>
<script>
// Function to generate barcode for each OrderId and trigger print
function generateBarcodeAndPrint(id, orderId) {
JsBarcode("#barcodeCanvas-" + id, orderId, { format: "CODE128" });
// Wait for the barcode to be fully generated
//setTimeout(function () {
// window.print();
//}, 500); // Adjust the delay as needed
}
</script>
</div>
<hr>
<div class="col-12">
<p>@item.OrderNavigation.Address</p>
</div>
@foreach (var ittem in orders)
{
<hr>
<div class="col-12">
<p style="text-align:center;">Quantity</p>
<div style="border: 2px solid #000; width: fit-content; padding: 10px; text-align: center; margin: auto;">
<h3> @ittem.OrderNavigation.Quantity</h3>
</div>
<hr>
<div class="col-12">
<b class="text-center" style="text-align:center;">@ittem.OrderNavigation.Title</b>
</div>
<hr>
<div class="col-12">
<b class="text-center" style="text-align:center;">SKU: @ittem.OrderNavigation.Sku</b>
</div>
<hr>
<div class="col-12">
<b class="text-center" style="text-align:center;">Label Count: @item.TotalCount</b>
</div>
</div>
}
page++;
i++;
}
else
{
j++;
@* cnt++;
*@ }
}
}
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
@*<script>
$(document).ready(function() {
alert('@ViewBag.count label will be printed.');
});
</script>*@
